Android Paint.字符宽度是如何计算的?



我需要知道当我增加paint.getTextSize()n倍时文本的宽度如何变化。我以为这是成比例的,但第一次测试表明它不是。我得到了如下的结果,其中

  • 1号-Paint.setTextSize(float)设置的文本大小

  • 2号-用Paint.measureText(String)测量文本宽度

    1;1.0
    2;1.0
    3;2.0
    4;2.0
    5;3.0
    6;3.0
    7;4.0
    8;4.0
    9;5.0
    10;5.0
    11;6.0
    12;7.0
    13;7.0
    14;8.0
    15;8.0
    16;9.0
    17;9.0
    18;10.0
    19;10.0
    20;11.0
    21;11.0
    22;12.0
    23;13.0
    24;13.0
    25;14.0
    26;14.0
    27;15.0
    28;15.0
    29;16.0
    30;16.0
    31;17.0
    32;17.0
    33;18.0
    34;19.0
    35;19.0
    36;20.0
    37;20.0
    38;21.0
    39;21.0
    40;22.0
    41;22.0
    42;23.0
    43;23.0
    44;24.0
    45;24.0
    46;25.0
    47;26.0
    48;26.0
    49;27.0
    50;27.0
    51;28.0
    52;28.0
    53;29.0
    

是否有可能计算文本宽度在改变文本大小n次后会如何变化?
我不想每次改变大小时都使用Paint.measureText(String)方法,因为这对性能不利。
提前感谢!

参见在渲染到布局之前获取文本视图的高度。也许它会更快地测量文本。下面是一个关于高度的例子:

public static int getHeight(TextView t) {
int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(screenWidth(t.getContext()), View.MeasureSpec.AT_MOST);
int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
t.measure(widthMeasureSpec, heightMeasureSpec);
return t.getMeasuredHeight();
}
public static int screenWidth(Context context)
{
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
return display.getWidth();
}

你也可以试着估计一个变化的公式。

最新更新