码迷,mamicode.com
首页 > 移动开发 > 详细

字体在Android View中的输出 drawText

时间:2015-08-09 18:30:17      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

Canvas 作为绘制文本时,使用FontMetrics对象,计算位置的坐标。
 
public static class FontMetrics {   
      
    public float   top;   
      
    public float   ascent;   
      
    public float   descent;   
      
    public float   bottom;   
      
    public float   leading;   
}  
它的各基准线可以参考下图: 
 
技术分享
技术分享

 
上图其实是通过代码画出来的,具体代码如下:
 
  
mPaint.reset();   
mPaint.setColor(Color.WHITE);   
mPaint.setTextSize(80);   
// FontMetrics对象    
FontMetrics fontMetrics = mPaint.getFontMetrics();   
String text = "abcdefg";   
// 计算每一个坐标    
float textWidth = mPaint.measureText(text);   
float baseX = 30;   
float baseY = 700;   
float topY = baseY + fontMetrics.top;   
float ascentY = baseY + fontMetrics.ascent;   
float descentY = baseY + fontMetrics.descent;   
float bottomY = baseY + fontMetrics.bottom;   
// 绘制文本    
canvas.drawText(text, baseX, baseY, mPaint);   
// BaseLine描画    
mPaint.setColor(Color.RED);   
canvas.drawLine(baseX, baseY, baseX + textWidth, baseY, mPaint);   
mPaint.setTextSize(20);   
canvas.drawText("base", baseX + textWidth, baseY, mPaint);   
// Base描画    
canvas.drawCircle(baseX, baseY, 5, mPaint);   
// TopLine描画    
mPaint.setColor(Color.LTGRAY);   
canvas.drawLine(baseX, topY, baseX + textWidth, topY, mPaint);   
canvas.drawText("top", baseX + textWidth, topY, mPaint);   
// AscentLine描画    
mPaint.setColor(Color.GREEN);   
canvas.drawLine(baseX, ascentY, baseX + textWidth, ascentY, mPaint);   
canvas.drawText("ascent", baseX + textWidth, ascentY + 10, mPaint);   
// DescentLine描画    
mPaint.setColor(Color.YELLOW);   
canvas.drawLine(baseX, descentY, baseX + textWidth, descentY, mPaint);   
canvas.drawText("descent", baseX + textWidth, descentY, mPaint);   
// ButtomLine描画    
mPaint.setColor(Color.MAGENTA);   
canvas.drawLine(baseX, bottomY, baseX + textWidth, bottomY, mPaint);   
canvas.drawText("buttom", baseX + textWidth, bottomY + 10, mPaint);  
相信通过以上程序,能够很好的理解topLine,buttomLine,baseLine,ascentLine,descentLine。 
 
另外:Paint类有两个方法
 
  
public native float ascent();   
   
  
public native float descent();  
ascent():the distance above the baseline(baseline以上的height) 
 
descent():the distance below the baseline(baseline以下的height)
 
所以ascent() + descent() 可以看成文字的height。
 
到此为止,怎么获取文字的height和width都已经揭晓了:

 

字体在Android View中的输出 drawText

标签:

原文地址:http://www.cnblogs.com/exmyth/p/4715404.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!