zoukankan      html  css  js  c++  java
  • 字体在Android View中的输出 drawText

    Canvas 作为绘制文本时,使用FontMetrics对象,计算位置的坐标。
     
    public static class FontMetrics {   
          
        public float   top;   
          
        public float   ascent;   
          
        public float   descent;   
          
        public float   bottom;   
          
        public float   leading;   
    }  
    它的各基准线可以参考下图: 
     
    字体在Android <wbr>View中的输出 <wbr>drawText
    字体在Android <wbr>View中的输出 <wbr>drawText

     
    上图其实是通过代码画出来的,具体代码如下:
     
      
    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都已经揭晓了:
  • 相关阅读:
    《当程序员的那些狗日日子》(六)继续熬夜学习的日子
    《当程序员的那些狗日日子》(四)喘过气来了
    《当程序员的那些狗日日子》(二)走上不归路
    《当程序员的那些狗日日子》(八)床上等你
    《当程序员的那些狗日日子》(一)毕业后的徘徊
    wince定时拍照功能(转)
    Excel公式找出某一列中是否有某值
    2010年到10月的流水帐
    不错的windows phone的博客
    将同一个表中的一个域更新到另外一个域的SQL文
  • 原文地址:https://www.cnblogs.com/exmyth/p/4715404.html
Copyright © 2011-2022 走看看