当前位置: 首页 > 面试题库 >

android canvas drawText从宽度设置字体大小?

昝枫
2023-03-14
问题内容

我想canvas使用指定宽度绘制文本.drawtext

例如,400px无论输入文本是什么,文本的宽度都应始终为。

如果输入文本较长,则将减小字体大小;如果输入文本较短,则将相应地增大字体大小。


问题答案:

这是一种更有效的方法:

/**
 * Sets the text size for a Paint object so a given string of text will be a
 * given width.
 * 
 * @param paint
 *            the Paint to set the text size for
 * @param desiredWidth
 *            the desired width
 * @param text
 *            the text that should be that width
 */
private static void setTextSizeForWidth(Paint paint, float desiredWidth,
        String text) {

    // Pick a reasonably large value for the test. Larger values produce
    // more accurate results, but may cause problems with hardware
    // acceleration. But there are workarounds for that, too; refer to
    // http://stackoverflow.com/questions/6253528/font-size-too-large-to-fit-in-cache
    final float testTextSize = 48f;

    // Get the bounds of the text, using our testTextSize.
    paint.setTextSize(testTextSize);
    Rect bounds = new Rect();
    paint.getTextBounds(text, 0, text.length(), bounds);

    // Calculate the desired size as a proportion of our testTextSize.
    float desiredTextSize = testTextSize * desiredWidth / bounds.width();

    // Set the paint for that size.
    paint.setTextSize(desiredTextSize);
}

然后,您所要做的就是setTextSizeForWidth(paint, 400, str);(400为问题中的示例宽度)。

为了获得更高的效率,您可以使它Rect成为静态类成员,从而避免每次实例化它。但是,这可能会引入并发问题,并且可能会阻碍代码的清晰度。



 类似资料:
  • 我会保持简短直截了当,这样我就明白了: > vw根据视区宽度更改字体大小。 VH根据视区高度更改字体大小。 我的问题是; 有没有一种方法可以根据视区的宽度和高度来缩放我的字体大小?因此,改变浏览器的高度和宽度将适当地缩放我的字体大小。 我这样问是因为我想根据它们所在的容器适当地缩放我的文本大小,我的问题是容器缩放到100%的宽度和100%的高度。因此,根据高度和宽度来缩放文本大小似乎是合乎逻辑的,

  • 我正在使用iTextSharp创建一个新的pdf文件。pdf将包含一个标题和一个pdf表格。生成的pdf文件的文件大小应该尽可能小,所以我使用默认字体(Helvetica,12pt)。有没有办法将默认字体大小从12pt更改为8pt。 我知道我可以为每个pdf表格单元格设置字体。 但是是否可以为整个文档/表格设置默认字体大小,这样我就不需要为每个表格单元格额外设置字体了? (我在谷歌上搜索了这个话题

  • 我用的是木星笔记本。我有一个相当宽的屏幕,但是显示的输出(例如,当我打印一个数组时)被格式化,就像屏幕很窄一样。 我找到了一种增加细胞宽度的方法 但这似乎只影响输入,而不影响输出(参见屏幕截图): 我已尝试在

  • 问题内容: 我的元素: 风格: 脚本,使其保持方形: 问题是要在纯CSS中做同样的事情。没有脚本。 问题答案: 我知道有两种技术可以根据元素的高度保持元素的长宽比: 当 高度相对于视口时 : 您可以使用vh单位: 对于 基于父元素的高度的高度 : 您可以使用具有所需纵横比的虚拟图像。宽高比为1:1的示例可以使用1 * 1透明.png图像,也可以使用@vlgalik注释为1 * 1 base64编码

  • 我需要制作某种表格,在其中存储简单的区域节点(之后我会在上面做其他事情——比如水平移动单元格并给它们其他属性,例如标签)表格将有很多列, 这是我生成该表的部分代码。 这是我在屏幕上得到的输出。正如你所观察到的,一些网格是紧粒度的,而另一些网格则是紧粒度的 你知道为什么它是错误的,以及如何修复它吗? 附言:这是我在这里的第一个帖子,我希望我做的一切都是对的;)

  • 如何在JavaFX中设置的宽度? 我试过这个: 但我看不到任何变化。