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都已经揭晓了:
  • 相关阅读:
    通过SSH隧道的本地转发实现Django连接远程数据库
    Mysql多数据库备份
    apollo 项目配置中心开源框架部署
    nginx 配置多个 https 域名访问
    beetl 模板语法
    异常:由 spring-session pom 引发
    异常:NoSuchFieldError: BEST_MATCHING_HANDLER_ATTRIBUTE
    【Redis__验证】手机验证和限制登录功能
    【Linux__环境】配置
    【Layui__上传】多图上传
  • 原文地址:https://www.cnblogs.com/exmyth/p/4715404.html
Copyright © 2011-2022 走看看