自定义View绘制文本居中

2018-02-25  本文已影响12人  满天星爱我

先看一张图:


1.png

Baseline是基线,在android中,文字的绘制都是从Baseline处开始的,Baseline往上至字符“最高处”的距离我们称之为ascent(上坡度),Baseline往下至字符“最低处”的距离我们称之为descent(下坡度);

leading(行间距)则表示上一行字符的descent到该行字符的ascent之间的距离;

2.png

top和bottom文档描述地很模糊,其实这里我们可以借鉴一下TextView对文本的绘制,TextView在绘制文本的时候总会在文本的最外层留出一些内边距,为什么要这样做?因为TextView在绘制文本的时候考虑到了类似读音符号,下图中的A上面的符号就是一个拉丁文的类似读音符号的东西:

Baseline是基线,Baseline以上是负值,以下是正值,因此 ascent,top是负值, descent和bottom是正值。

Paint.FontMetrics metrics = mPaint.getFontMetrics();

其实真是的文本高度为: metrics.descent - metrics.asscent;

但是绘制的时候一般都是以:metrics.bottom - metrics.top 来作为文本的高度

那么基线的y轴坐标就是: getHeight() / 2 + (metrics.bottom - metrics.top) / 2 - metrics.bottom;

上一篇 下一篇

猜你喜欢

热点阅读