drawText 的绘制位置
2019-05-22 本文已影响0人
涛涛123759
drawText的四线格与 FontMetrics
首先,我们看下这个方法参数的含义:canvas.drawText(text, x, y, paint),第一个参数是我们需要绘制的文本,第四个参数是我们的画笔,这两个不用多说,主要是第二和第三个参数的含义,这两个参数在不同的情况下的值还是不一样的,x默认是这个字符串的左边在屏幕的位置,如果设置了paint.setTextAlign(Paint.Align.CENTER);那就是字符的中心,y是指定这个字符baseline在屏幕上的位置,大家记住了,不要混淆,y不是这个字符中心在屏幕上的位置,而是baseline在屏幕上的位置。
绘制 Text 是依据 基线 来进行绘制的,其实系统在绘制 Text 时,还有其他线存在的,而 基线 只是用来绘制 Text 的一个标准线
从上图可以看出,除了 基线 以外,还有另外 四 条线,分别是 top、bottom、ascent、descent、它们所表示的意思分别是:
top:可绘制的最高高度所在线,及基线(base)上方的最大距离
ascent:系统建议的,绘制单个字符时,字符应当的最高高度所在线,及在基线(base)上方被推荐的距离。
descent:系统建议的,绘制单个字符时,字符应当的最低高度所在线,及在基线(base)下方被推荐的距离
bottom:可绘制的最低高度所在线,及基线(base)下方的最大距离
//文字的高度
Paint.FontMetrics fm = paint.getFontMetrics();
float textHeight = fm.descent - fm.ascent;
return textHeight;
//基线在屏幕上的位置
Paint.FontMetrics fm = mTextLeftPaint.getFontMetrics();
float textHeight = fm.descent - fm.ascent;
float baseLine = (textHeight - fm.bottom - fm.top) / 2;
或:
String text = "Android";
Rect rect = new Rect();
mPaint.getTextBounds(text, 0, text.length(), rect);
int width = rect.width();//文本的宽度
int height = rect.height();//文本的高度