Android使用FontMetrics对象计算位置坐标

发布时间:2019-08-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android使用FontMetrics对象计算位置坐标脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

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)

android教程
脚本网站
android studio

脚本宝典总结

以上是脚本宝典为你收集整理的Android使用FontMetrics对象计算位置坐标全部内容,希望文章能够帮你解决Android使用FontMetrics对象计算位置坐标所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。