1.横向中心位置
直接使用
paint.setTextAlign(Paint.Align.CENTER)
2.纵向中心位置
文字绘制的标准及相关属性
上图
红色线条为 文字绘制的基准线 BaseLine
上边黑色线条是 top
下边黑色线条是 bottom
上边蓝色线条是 ascent
下边蓝色线条是 descent
绿色线条是中线线
红色基准下 上边为负值 下边为正值 与安卓坐标系相同
正常文字(中英文,拼音)绘制的位置不会超过descent - ascent 的范围
蒙文 阿拉伯文 一些特殊文字 会到 bottom - top 范围
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