自定义view文字测量备忘
2020-07-16 本文已影响0人
Codes作业本
Android中文字测量
获取文字长度:
- 方式1
var textValue = "待测量文字"
var txtLength = mPaint.measureText("待测量文字")
- 方式2
var textValue = "待测量文字"
var mRect = Rect()
mPaint.getTextBounds(textValue, 0, textValue.length, mRect)
//文字具体尺寸通过Rect获取
var left = mRect.left
var top = mRect.top
var right = mRect.right
var bottom = mRect.bottom
字体的属性
leading 上一行文字的descent到当前行文字的ascent称为行距
top 最高字符到baseline的值,以baseline为基准,负值
ascent baseline之上至字符最高处的距离,以baseline为基准,负值
baseline Android文本绘制是以baseline为基准的
descent baseline之下至字符最低处的距离,以baseline为基准,正值
bottom 最下字符到baseline的值,以baseline为基准,正值
//通过如下方式获取字体的属性值
var mFrontMetrics: Paint.FontMetrics = mPaint.fontMetrics
mFrontMetrics.top
mFrontMetrics.ascent
mFrontMetrics.descent
mFrontMetrics.bottom
需要注意的点是图中文字左下角的Origin的点为文字的原点(文字的左下角)
baseline基线与Origin点相交,相当于文字的x轴,Origin垂直的线为y轴(文字的左侧边缘)
x轴上方y值为负,x轴下方y值为正(其他与屏幕坐标象限值相同)
在onDraw()中绘制文字
/**
y = baseLine
其中center值可以理解成View的基准位置(文字基于Y轴的位置)
但是仅仅基于center计算显示是不正常的,需要算出baseLine的值,才能正确显示
*/
var baseLine =
center + (mFrontMetrics.bottom - mFrontMetrics.top) / 2 - mFrontMetrics.bottom
canvas.drawText(String text, float x, float y, Paint paint)
image.png