美文网首页
Android绘制文本

Android绘制文本

作者: 任天一 | 来源:发表于2019-03-19 19:32 被阅读0次
-  x=getWidth()/2-mPaint.measureText(mText)/2; 
-  y=getHeight()/2+(fontMetrics.bottom-fontMetrics.top)/2-fontMetrics.bottom
-  getWidth(): 控件的宽度(view的宽度) 
-  getHeight():控件的高度(view的高度) 
- mPaint.measureText(mText)是精确的测出绘制文本的宽度 
-  fontMetrics.bottom-fontMetrics.top就是绘制文本的高度。
-  y计算出来就是baseline的纵坐标 
- 理解:y点坐标y=getHeight()/2+(fontMetrics.bottom-fontMetrics.top)/2 这就是基线的位置, 再减fontMetrics.bottom就是descent线的位置了
20151229094808805.png
在这个图中,总共有四条线:top线,bottom线,baseline和center线;
图中center线正是在top线和bottom线的正中间。
为了方便推导公式,我另外标了三个距离A,B,C;
很显然,距离A和距离C是相等的,都等于文字所在矩形高度以的一半,即:
A = C = (bottom - top)/2;
又因为bottom = baseline + FontMetrics.bottom;
top = baseline+FontMetrics.top;
所以,将它们两个代入上面的公式,就可得到:
A = C = (FontMetrics.bottom - FontMetrics.top)/2;
而距离B,则表示Center线到baseline的距离。
很显然距离B = C - (bottom - baseline);
又因为
FontMetrics.bottom = bottom-baseline;
C = A;
所以,B = A - FontMetrics.bottom;
所以baseline = center + B = center + A - FontMetrics.bottom = center + (FontMetrics.bottom - FontMetrics.top)/2 - FontMetrics.bottom;

根据上面的推导过程,我们最终可知,当给定中间线center位置以后,baseline的位置为:

baseline = center + (FontMetrics.bottom - FontMetrics.top)/2 - FontMetrics.bottom;
总结:定了中线就可以随意确定基线和字体的位置了 

相关文章

网友评论

      本文标题:Android绘制文本

      本文链接:https://www.haomeiwen.com/subject/dqonmqtx.html