这期内容当中小编将会给大家带来有关怎么在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; }
它的各基准线可以参考下图:
上图其实是通过代码画出来的,具体代码如下:
/** 绘制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中使用FontMetrics对象计算坐标了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。