我们在自定义View的时候,常常需要在Canvas上绘制文本。而我们在绘制文本时主要使用的API是
//绘制文本
public void drawText(@NonNull String text, float x, float y, @NonNull Paint paint)
一.确认文本绘制的位置
上面绘制文本的方法参数x代表的是绘制文本时的对齐方式的X坐标。这个对齐方式用Paint对象进行设置,包括Paint.Align.LEFT(左对齐,文本的左边与X坐标对齐,绘制的文本全部位于X坐标的右边),Paint.Align.RIGHT(右对齐,文本的右边与X坐标对齐,绘制的文本全部位于X坐标的左边),Paint.Align.CENTER(中对齐,文本位于X坐标的两边且均分)。
val mPaint = Paint(Paint.ANTI_ALIAS_FLAG)
//设置绘制文本的对齐方式
mPaint.textAlign = Paint.Align.LEFT
参数y代表的是绘制文本时的基线Y坐标。那什么是基线呢?看下面一张图
上面红色的那条线就是基线,绿色为文本内容的最高点,蓝色为文本内容的最低点。
很多时候,我们希望的是文本内容垂直居中。那我们如何根据中线的Y坐标求出基线的Y坐标呢?从上面的图可以看出【基线的Y坐标 = 中线的Y坐标 + (Descent - Ascent) / 2 - Descent】。现在,我们知道了计算方法。但是我们如何得到上面的这些数据呢?在Paint类里面有一个静态内部类Paint.FontMet