zoukankan      html  css  js  c++  java
  • android FrontMetrics类的使用

    Canvas 绘制文本时,使用FontMetrics对象,计算位置的坐标。

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. public static class FontMetrics {  
    2.     /** 
    3.      * The maximum distance above the baseline for the tallest glyph in  
    4.      * the font at a given text size. 
    5.      */  
    6.     public float   top;  
    7.     /** 
    8.      * The recommended distance above the baseline for singled spaced text. 
    9.      */  
    10.     public float   ascent;  
    11.     /** 
    12.      * The recommended distance below the baseline for singled spaced text. 
    13.      */  
    14.     public float   descent;  
    15.     /** 
    16.      * The maximum distance below the baseline for the lowest glyph in  
    17.      * the font at a given text size. 
    18.      */  
    19.     public float   bottom;  
    20.     /** 
    21.      * The recommended additional space to add between lines of text. 
    22.      */  
    23.     public float   leading;  
    24. }  
    它的各基准线可以参考下图:


    上图其实是通过代码画出来的,具体代码如下:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /** 绘制FontMetrics对象的各种线 */  
    2. mPaint.reset();  
    3. mPaint.setColor(Color.WHITE);  
    4. mPaint.setTextSize(80);  
    5. // FontMetrics对象  
    6. FontMetrics fontMetrics = mPaint.getFontMetrics();  
    7. String text = "abcdefg";  
    8. // 计算每一个坐标  
    9. float textWidth = mPaint.measureText(text);  
    10. float baseX = 30;  
    11. float baseY = 700;  
    12. float topY = baseY + fontMetrics.top;  
    13. float ascentY = baseY + fontMetrics.ascent;  
    14. float descentY = baseY + fontMetrics.descent;  
    15. float bottomY = baseY + fontMetrics.bottom;  
    16. // 绘制文本  
    17. canvas.drawText(text, baseX, baseY, mPaint);  
    18. // BaseLine描画  
    19. mPaint.setColor(Color.RED);  
    20. canvas.drawLine(baseX, baseY, baseX + textWidth, baseY, mPaint);  
    21. mPaint.setTextSize(20);  
    22. canvas.drawText("base", baseX + textWidth, baseY, mPaint);  
    23. // Base描画  
    24. canvas.drawCircle(baseX, baseY, 5, mPaint);  
    25. // TopLine描画  
    26. mPaint.setColor(Color.LTGRAY);  
    27. canvas.drawLine(baseX, topY, baseX + textWidth, topY, mPaint);  
    28. canvas.drawText("top", baseX + textWidth, topY, mPaint);  
    29. // AscentLine描画  
    30. mPaint.setColor(Color.GREEN);  
    31. canvas.drawLine(baseX, ascentY, baseX + textWidth, ascentY, mPaint);  
    32. canvas.drawText("ascent", baseX + textWidth, ascentY + 10, mPaint);  
    33. // DescentLine描画  
    34. mPaint.setColor(Color.YELLOW);  
    35. canvas.drawLine(baseX, descentY, baseX + textWidth, descentY, mPaint);  
    36. canvas.drawText("descent", baseX + textWidth, descentY, mPaint);  
    37. // ButtomLine描画  
    38. mPaint.setColor(Color.MAGENTA);  
    39. canvas.drawLine(baseX, bottomY, baseX + textWidth, bottomY, mPaint);  
    40. canvas.drawText("buttom", baseX + textWidth, bottomY + 10, mPaint);  
    相信通过以上程序,能够很好的理解topLine,buttomLine,baseLine,ascentLine,descentLine。

    另外:Paint类有两个方法

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. /** 
    2.  * Return the distance above (negative) the baseline (ascent) based on the 
    3.  * current typeface and text size. 
    4.  * 
    5.  * @return the distance above (negative) the baseline (ascent) based on the 
    6.  *         current typeface and text size. 
    7.  */  
    8. public native float ascent();  
    9.   
    10. /** 
    11.  * Return the distance below (positive) the baseline (descent) based on the 
    12.  * current typeface and text size. 
    13.  * 
    14.  * @return the distance below (positive) the baseline (descent) based on 
    15.  *         the current typeface and text size. 
    16.  */  
    17. 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都已经揭晓了:

    获取height : mPaint.ascent() + mPaint.descent()

    获取width : mPaint.measureText(text)

  • 相关阅读:
    ios系统滚动穿透
    移动h5 开发遇到ios系统的各种问题汇总
    移动端选择时间时软键盘弹出问题
    ios系统设置-webkit-overflow-scrolling: touch导致z-index 失效 (弹窗层级设置无效)- 替代方案
    npm i 报错 npmERR! code Z_BUF_ERROR errno -5 // 后继 chromedriver.zip 相关问题报错解决
    mysql、orcale、sql server的区别
    jsp中的select选择
    sql面试
    java面试题
    struts2总结
  • 原文地址:https://www.cnblogs.com/lechance/p/4373206.html
Copyright © 2011-2022 走看看