Android 文字繪製中的 FontMetrics 和 drawText()

原文鏈接:https://www.jianshu.com/p/5a78572580f5

在繪製文字的時候,不可避免的用到 FontMetrics 類和 Canvas#drawText() 方法,這裏詳細介紹下。

FontMetrics

先看下面這張圖:

 

FontMetrics Lines

圖中有五條線,自上而下分別是:

  • top line: 文字可繪製區域最頂部的線;
  • ascent line: 系統推薦的,文字可繪製區域頂部的線;
  • baseline: 文字繪製的基線(在四線格上書寫英文字母時的第三條線);
  • descent line: 系統推薦的,文字可繪製區域底部的線;
  • bottom line: 文字可繪製區域最底部的線。

FontMetrics 類中有 [top, ascent, descent, bottom, leading] 字段,與上面 5 條線的關係是: FontMetrics對象中的字段值 = 對應線條的 Y 座標值 - baseline的 Y 座標值 ,如果用 Y(line A) 表示線條 A 的 Y 座標的話,那麼以下等式成立:

FontMetrics::top = Y(top line) - Y(baseline);
FontMetrics::ascent = Y(ascent line) - Y(baseline);
FontMetrics::descent = Y(descent line) - Y(baseline);
FontMetrics::bottom = Y(bottom line) - Y(baseline);

需要注意的是: 通常情況下,Android 中的 y 軸的正方向是沿屏幕向下的,也就是越往下 y 座標越大,所以 FontMetricstopascent 值是負值, descentbottom 的值是正值。

餘下的字段 leading 表示 系統推薦的行間距。

在實際開發中,通常使用 PaintgetFontMetrics() 獲得其對應的 FontMetrics 對象。

drawText()

繪製文字的時候,需要使用 CanvasdrawText(String text, float x, float y, Paint paint) 方法,其中的 text 表示 所需繪製的文字, paint 表示 畫筆,這很好理解,那麼 xy 又是什麼呢?

這裏把 xy 組成的點 (x, y) 稱作 基點,用於控制文字繪製的基準位置,而 Paint 中的 Align 對象指定文字對齊方式。 基點 和 Align 共同作用從而成功繪製文字。特別地是:基點的 Y 座標(也就是 y 值)其實就是前面提到的 baseline 的 Y 座標

比如:上面圖中 baseline 上的黃點就是基點,可以觀察得出其對齊方式 Align 就是 CENTER

Sample

示例截圖:

 

FontMetrics Sample

GitHub: FontMetricsSample

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章