• 字体在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都已经揭晓了:
  • 相关阅读:
    git commit --amend
    Interleaving String leetcode
    Longest Common Substring
    Distinct Subsequences Leetcode
    Longest Common Subsequence
    Palindrome Partitioning II Leetcode
    百度面试时遇到这样一个问题:给定数组a[];计算除最后一个元素之外其他元素的和,下面的代码有什么问题吗
    sizeof与strlen
    网络是怎么连接的(2)?
    网络是怎么连接的(1)?
  • 原文地址:https://www.cnblogs.com/exmyth/p/4715404.html
Copyright © 2020-2023  润新知