我有一个传递文本字符串的方法。对于指定的字体和大小,它会计算出文本的边界框,然后绘制一个包含它的圆角。
我试图将所有这些舍入保持相同的高度(不管字体中的上升和下降),因此基本的getTextBounds不足以限制传递的特定文本。
我提出的解决方案是使用getTextBounds计算文本的宽度,并从FontMetricsInt上升/下降以计算出高度:
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextSize(fontsize);
paint.setTypeface(Typeface.SANS_SERIF);
Rect textBounds = new Rect();
paint.getTextBounds(value, 0, value.length(), textBounds);
FontMetricsInt fm = paint.getFontMetricsInt();
this.width = textBounds.width();
this.height = fm.descent - fm.ascent;
this.textAscent = fm.ascent;
有更简单的方法吗?
编辑:最后想出了如何正确格式化代码!
答案 0 :(得分:3)
为什么不使用如下的直接函数:paint.measureText(value),paint.ascent(),paint.descent()?代码是:
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextSize(fontsize);
paint.setTypeface(Typeface.SANS_SERIF);
this.width = paint.measureText(value);
this.height = paint.descent() - paint.ascent();
this.textAscent = paint.ascent();
不是一个很大的改进,但更容易阅读。
答案 1 :(得分:2)
您无需从ascent()
中减去descent()
。您可以使用Paint.getFontSpacing()
:
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextSize(fontsize);
paint.setTypeface(Typeface.SANS_SERIF);
this.width = paint.measureText(value);
this.height = paint.getFontSpacing();
this.textAscent = paint.ascent();