自定义view文字测量备忘

2020-07-16  本文已影响0人  Codes作业本

Android中文字测量

获取文字长度:

var textValue = "待测量文字"
var txtLength = mPaint.measureText("待测量文字")
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
上一篇下一篇

猜你喜欢

热点阅读