Android 文字绘制到View中心位置

118 阅读1分钟

1.横向中心位置

直接使用

paint.setTextAlign(Paint.Align.CENTER)

2.纵向中心位置

文字绘制的标准及相关属性

51b69f1602a13c7423373c3dafc08a0.png

上图

红色线条为 文字绘制的基准线 BaseLine

上边黑色线条是 top

下边黑色线条是 bottom

上边蓝色线条是 ascent

下边蓝色线条是 descent

绿色线条是中线线

红色基准下 上边为负值 下边为正值 与安卓坐标系相同

正常文字(中英文,拼音)绘制的位置不会超过descent - ascent 的范围

蒙文 阿拉伯文 一些特殊文字 会到 bottom - top 范围



image.png

getHeight()/2 是view的中心位置  发现字体偏上  偏移距离是红色基准线到文字中心线的距离 应该向下移动文字位置  向下为正

即 : 把绿色文字中心线移动到 红色基准线的位置  



getHeight()/2 是view的中心位置
fontMetrics.descent - fontMetrics.ascent 是文字的高度
(fontMetrics.descent - fontMetrics.ascent)/2 为中心线的位置
float baseline = getHeight()/2 + (fontMetrics.descent - fontMetrics.ascent)/2
把基准线移动到descent的下边线位置 多移动了 descent 的距离
所以 float baseline = getHeight()/2 + (fontMetrics.descent - fontMetrics.ascent)/2 - descent 就是将文字中心线移动到了基准线的位置
float baseline = getHeight()/2 + fontMetrics.descent/2 - fontMetrics.ascent/2 - fontMetrics.descent
float baseline = getHeight()/2 - fontMetrics.descent/2 - fontMetrics.ascent/2
float baseline = getHeight()/2 - (fontMetrics.descent + fontMetrics.ascent)/2


4a1c51486d01ec7570f89f4015f920d.png