drawText参数介绍及绘制居中文本

这篇博客详细介绍了Android中drawText方法的参数含义和如何计算实现文本居中。通过理解TextPaint类的属性,如ascent、descent和baseline,博主提供了两种文本居中的计算公式,并强调了在使用公式时需要注意ascent的负值。

于 2015-09-10 首发在Hyman’s Blog

在android自定义控件中经常用到canvas.drawText方法来绘制文本,我自己在用这个方法的时候,有很多迷惑,首先对参数含义不明白,其次对实现文本居中的计算公式也不太理解。
经过查阅API文档和相关博文,终于算是对这两个疑点理解好了,下面就进行一下总结。

方法参数介绍

首先可以看一下API上对这个方法的描述

drawtext_api

可以看到,这四个参数依次为:
text:需要绘制的文本;
x:文本的水平方向原点距其所在view左边的距离。原点默认是字符串的的最左边,如果设置了paint.setTextAlign(Paint.Align.CENTER);那么原点就是字符串的中心了;
y:表示文本的baseline距离所在view的顶部的距离;
paint:用来绘制文本的画笔。

绘制居中文本

首先需要了解一个类,Paint.FontMetrics
这个类的在API中的介绍如下:

FontMetrics

baseline为文本的基准线
ascent:是baseline之上至字符最高处的距离;
bottom:是文本中字符的最下边到baseline的距离,即descent的最大值;
descent:是baseline之下至字符最低处的距离;
leading:上一行文本的descent到当前行ascent之间的距离;
top:是文本中字符的最上边到baseline的距离,即ascent的最大值。

注意:top、ascent是负数,bottom、descent是正数。

总结

他们之间的关系用图表示如下:(该图来自于参考博客)

fontmetrics_img

文本居中baseline距view上边距的距离计算公式

公式一:中心轴线距view顶部的距离-文本高度的一半+|ascent|
int baseLine = (getMeasuredHeight() - fontMetrics.bottom + fontMetrics.top) / 2 - fontMetrics.top;
  
公式二:中心轴线距view顶部的距离+文本高度的一般-descent
int baseLine = getMeasuredHeight()/2 + (fontMetrics.descent- fontMetrics.ascent)/2 - fontMetrics.descent;
  
两个公式中top可以用ascent替换,bottom可以用descent替换,要成对替换!

这两个公式的理解:
首先,文本居中的话那么文本的水平中心轴线应该和所在view的水平中心线重合;
接下来,descent-ascent的值可以看做文本的高度,这里ascent是负数所以是减号(我之前看着公式弄迷糊了就是因为不清粗ascent是负数);
能力有限,这些都只是整理网上别人写的博文加上自己的理解,如果有不妥的地方还望指正!

参考

http://blog.youkuaiyun.com/lovexieyuan520/article/details/43153275
http://mikewang.blog.51cto.com/3826268/871765/
http://blog.youkuaiyun.com/tianjf0514/article/details/7642656

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值