国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android使用FontMetrics對象計算位置坐標

2019-10-21 21:31:53
字體:
來源:轉載
供稿:網友

Canvas繪制文本時,使用FontMetrics對象,計算位置的坐標。

public static class FontMetrics {  /**   * The maximum distance above the baseline for the tallest glyph in    * the font at a given text size.   */  public float  top;  /**   * The recommended distance above the baseline for singled spaced text.   */  public float  ascent;  /**   * The recommended distance below the baseline for singled spaced text.   */  public float  descent;  /**   * The maximum distance below the baseline for the lowest glyph in    * the font at a given text size.   */  public float  bottom;  /**   * The recommended additional space to add between lines of text.   */  public float  leading;}

它的各基準線可以參考下圖:

Android,FontMetrics,位置坐標

上圖其實是通過代碼畫出來的,具體代碼如下:

/** 繪制FontMetrics對象的各種線 */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類有兩個方法

/** * Return the distance above (negative) the baseline (ascent) based on the * current typeface and text size. * * @return the distance above (negative) the baseline (ascent) based on the *     current typeface and text size. */public native float ascent(); /** * Return the distance below (positive) the baseline (descent) based on the * current typeface and text size. * * @return the distance below (positive) the baseline (descent) based on *     the current typeface and text size. */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)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 祁门县| 普兰店市| 秦安县| 浮山县| 洮南市| 陆良县| 杭州市| 普兰县| 虞城县| 增城市| 和政县| 延庆县| 吉木乃县| 九龙坡区| 石棉县| 吉首市| 海城市| 象山县| 佛教| 沙田区| 多伦县| 德阳市| 宜宾市| 柳州市| 顺义区| 耒阳市| 疏附县| 西乌珠穆沁旗| 清水县| 平武县| 台南县| 六枝特区| 应城市| 阿鲁科尔沁旗| 朝阳县| 台中市| 隆德县| 靖江市| 镇宁| 麻江县| 左贡县|