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

 更新时间:2018年12月25日 08:50:20   作者:teletian  
这篇文章主要为大家详细介绍了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 自定义ScrollView实现背景图片伸缩的实现代码及思路

    android 自定义ScrollView实现背景图片伸缩的实现代码及思路

    本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~,首先还是按照通例给大家看下示例.
    2013-05-05
  • Kotlin封装RecyclerView Adapter实例教程

    Kotlin封装RecyclerView Adapter实例教程

    这篇文章主要给大家介绍了关于Kotlin封装RecyclerView Adapter的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • Android 创建依赖库的方法(保姆级教程)

    Android 创建依赖库的方法(保姆级教程)

    这篇文章主要介绍了Android 创建依赖库的方法(保姆级教程),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Android招聘面试题解答

    Android招聘面试题解答

    Android招聘面试题答案
    2013-11-11
  • Flutter runApp GestureBinding使用介绍

    Flutter runApp GestureBinding使用介绍

    这篇文章主要为大家介绍了Flutter runApp GestureBinding使用介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android自定义View多种效果解析

    Android自定义View多种效果解析

    这篇文章主要为大家详细介绍了Android自定义View多种效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android中Window的管理深入讲解

    Android中Window的管理深入讲解

    这篇文章主要给大家介绍了关于Android中Window管理的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • 基于Flutter实现图片选择和图片上传

    基于Flutter实现图片选择和图片上传

    Flutter 的图片选择插件很多,包括了官方的 image_picker,multi_image_picker(基于2.0出了 multi_image_picker2)等等。本文将利用这些插件实现图片选择和图片上传,需要的可以参考一下
    2022-03-03
  • Android通过多点触控的方式对图片进行缩放的实例代码

    Android通过多点触控的方式对图片进行缩放的实例代码

    这篇文章主要介绍了Android通过多点触控的方式对图片进行缩放的实例代码,完成了点击图片就能浏览大图的功能,并且在浏览大图的时候还可以通过多点触控的方式对图片进行缩放。
    2018-05-05
  • Kotlin标准函数与静态方法基础知识详解

    Kotlin标准函数与静态方法基础知识详解

    Kotlin中的标准函数指的是Standard.kt文件中定义的函数,任何Kotlin代码都可以自由地调用所有的标准函数。例如let这个标准函数,他的主要作用就是配合?.操作符来进行辅助判空处理
    2022-11-11

最新评论