首页 > 系统 > 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开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表