Android 文字测量

Android 文字测量

获取文字长度:

  • 方式1,只获取文字绘制的长度
var textValue = "待测量文字"
var txtLength = mPaint.measureText("待测量文字")
  • 方式2,比1更精确,可以获取具体大小
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)


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值