我们很多时候需要在自定义View中绘制一些Text,这时候需要用到Paint中的drawText
public void drawText(@NonNull String text, float x, float y, @NonNull Paint paint)
这里第三个参数y是指的是baseline位置(很多人都使用getMeasureHeight()/2)
到底baseline是什么呢?我们drawText的时候怎么计算y值?
首先我们先理解FontMetrics中的baseline、ascent、descent、top、bottom的具体含义,先看下面图
baseLine: 灰色的线
ascent: 上面蓝色线距离baseline的距离, 这个是负值
top: 是所有ascent最小数值(因为是负值,就是最高的),图中是上面绿色的线,这个也是负值
descent: 是下面红色的线到baseline的距离,这个是正值
bottom: 是所有字符descent最大值
在自定义View中drawtext的时候,居中显示,需要根据下面公式计算
Rect bounds = new Rect();
Paint.FontMetrics fm = textPaint.getFontMetrics();
//text高度
int textH = (int)(fm.descent - fm.ascent);
textPaint.getTextBounds(data, 0, data.length(), bounds);
startX = (getMeasuredWidth() - bounds.width())/2;
//ascent是负值
startY = (int)((getMeasuredHeight() - textH)/2 - fm.ascent);
canvas.drawText(data, startX, startY, textPaint);
代码比较简单,就不上传源码了。