我需要检测适合(宽度,高度)的文本的最大文本大小。获取文本大小值的最快方法是什么?
我尝试在for循环中迭代文本大小并获取Paint.getTextBounds()
但是它需要花费很多时间并且整个调用需要几秒钟。油漆字体为Typeface.MONOSPACE
,当char宽度相等时,它有助于节省时间。文本大小和字符宽度之间是否存在依赖关系以避免调用Paint.getTextBounds()
?该任务非常类似于为match_parent
宽度和高度获取TextView的文本大小,所以有人知道如何快速完成吗?
答案 0 :(得分:0)
因为您使用Typeface.MONOSPACE
,所以您不必为每个字符或每个文字大小计算文本范围。
假设您有变量paint
,其文本大小设置为12以便开始。您想要使用文字填充width
,height
区域。现在
Rect initialBounds = new Rect();
paint.getTextBounds(" ", 0, 1, initialBounds);
float initialTextSize = 12, increase = 2, currentSize = 12;
int charCount = text.length();//the char count we want to print
int maxCharCount = 0;//max count of chars we can print at currentSize.
do{
currentSize += increase;
float charWidth = initialBounds.right * currentSize / initialTextSize;
float charHeight = initialBounds.bottom * currentSize / initialTextSize;
int charPerLine = width / charWidth;
int lineCount = height / charHeight;
maxCharCount = charPerLine * lineCount;
}
while(maxCharCount > charCount);
currentSize -= increase;//this is the size we are looking for.
之后,您只需致电paint.setTextSize(currentSize);
并绘制文字。
我没有测试代码,但它应该可行。如果您还希望能够在必要时将文本大小减小到初始文本大小以下,则需要进行一些修改。