就在昨天看到gjz的一个库的时候,遇到了一个大坑。其实说起来被某一篇文章给坑大了,本人也超喜欢gjz写的一些库文件,貌似有些崇拜了。
gjz的github:https://github.com/gjiazhe
库地址:https://github.com/gjiazhe/MultiChoicesCircleButton
以前在canvas.drawText的时候总是没有设置paint的align属性,这里说一下如果你的paint.setTextAlign(Paint.Align.CENTER);
是这样的话,那么你就要注意了canvas.drawText(String text, float x, float y, Paint paint)
的第二个和第三个参数了,x指的是文本的横向的中点坐标,y指的是文本的baseLineY在屏幕上面的纵坐标。当时看到
final float baseLineY = mCircleCentreY - radius - textHeight / 2- (fontMetrics.descent - fontMetrics.ascent) / 2 - fontMetrics.ascent;
这样去算出文字的baseLineY的值,后来去找资料fontMetrics.descent
和fontMetrics.ascent
都表示的是什么,
结果查到的文章是这样的:
Ascent是baseline之上至字符最高处的距离
Descent是baseline之下至字符最低处的距离

这个是网上的说明图,我只是拿来用用,更为了好说明。如果都是距离的话
fontMetrics.descent - fontMetrics.ascent
这里就难得理解是文字占据的高度,这让我很纳闷。经过之后的debug测试后,发现fontMetrics.ascent
是一个负值,看到一个负值后,终于理解了gjz为啥是这么算出文本占据的高度了。
网友评论