Canvas 作为绘制文本时,使用FontMetrics对象,计算位置的坐标。
 
public static class FontMetrics {   
      
    public float   top;   
      
    public float   ascent;   
      
    public float   descent;   
      
    public float   bottom;   
      
    public float   leading;   
}  
它的各基准线可以参考下图: 
 

 
上图其实是通过代码画出来的,具体代码如下:
 
  
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类有两个方法
 
  
public native float ascent();   
   
  
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都已经揭晓了:

字体在Android View中的输出 drawText的更多相关文章

  1. Android view中的requestLayout和invalidate方法

    Android view中的requestLayout和invalidate方法 requestLayout:当view确定自身已经不再适合现有的区域时,该view本身调用这个方法要求parent v ...

  2. Android View中getViewTreeObserver().addOnGlobalLayoutListener() (转)

    转自:Android View中getViewTreeObserver().addOnGlobalLayoutListener() 我们知道在oncreate中View.getWidth和View.g ...

  3. Android View中的控件和监听方法...

    PS:居然三天没写博客了...今天补上...东西虽多,但是都是一些基础...代码多了一些,有人可能会这样问,粘这么多代码有毛用..其实对于一个Android的初学者来说,一个完整的代码是最容易帮助理解 ...

  4. Android View中滚动相关

    方法   scrollTo: (内容的左上角)达到某个地点 scrollBy: 根据当前位置,再移动多少 属性:   mScrollX, 以下是文档解释   The offset, in pixels ...

  5. android view 中各函数的执行顺数

    这个就好像是 activity 的生命周期一样,如果我们要使用自定义的 view,那么就很有必要了解一下 view 的那些能够被重写的函数的执行顺序.废话不多讲,以常用的5个函数为例子,见下文: pa ...

  6. Android 自定义view中的属性,命名空间,以及tools标签

    昨日看到有人在知乎上问这3个琐碎的小知识点,今天索性就整理了一下,其实这些知识点并不难,但是很多开发者平时很少注意到这些, 导致的后果就是开发的时候 经常会被ide报错,开发效率很低,或者看开源代码的 ...

  7. Android自定义View研究--View中的原点坐标和XML中布局自定义View时View触摸原点问题

    这里只做个汇总~.~独一无二 文章出处:http://blog.csdn.net/djy1992/article/details/9715047 Android自定义View研究--View中的原点坐 ...

  8. 在android项目中使用FontAwesome字体

    在android项目中使用FontAweSome图标集,可以方便的适配各种屏幕分辨率,不必在各种不同分辨率文件夹中新建资源文件.使用字体是一种很巧妙的方法,把图像以字体的方式呈现,这样以前设置为and ...

  9. Android XML中引用自定义内部类view的四个why

    今天碰到了在XML中应用以内部类形式定义的自定义view,结果遇到了一些坑.虽然通过看了一些前辈写的文章解决了这个问题,但是我看到的几篇都没有完整说清楚why,于是决定做这个总结. 使用自定义内部类v ...

随机推荐

  1. springmvc常见注解模式

    常用注解元素 @Controller 标注在Bean的类定义处 @RequestMapping 真正让Bean具备 Spring MVC Controller 功能的是 @RequestMapping ...

  2. 关于异常的疑难解答:System.Runtime.InteropServices.COMException

    COMException exception is thrown when an unrecognized HRESULT is returned from a COM method call.&qu ...

  3. Objective-C学习篇03—继承

    大纲: 继承的基本概念 自定义初始化方法 便利构造器方法 重写description方法 一 继承基本概念 程序里的对象和"人类"的对象是一样的,高富帅继承了父母,自然就拥有了父母 ...

  4. 《JavaScript高级程序设计》读书笔记

    Javascript由以下三部分组成: 核心(ECMAScript) 文档对象模型(DOM) 浏览器对象模型(BOM) ECMAScript组成部分: 语法.类型.语句.关键字.保留子.操作符.对象. ...

  5. head First HTML与CSS读书笔记

    调整图片大小 有滚动条的图片可给不了好的用户体验,为了让图片的大小更适合浏览器窗口.这时候就需要对图片的大小进行调整看书之前.我调整图片大小的方式是在<img>元素使用 width 和 h ...

  6. underscorejs-indexBy学习

    2.19 indexBy 2.19.1 语法 _.indexBy(list, iteratee, [context]) 2.19.2 说明 给定一个list,和 一个用来返回一个在列表中的每个元素键 ...

  7. 较详细的sqlserver数据库备份、恢复(转)

    C#实现SQL数据库备份与恢复 有两种方法,都是保存为.bak文件.一种是直接用Sql语句执行,另一种是通过引用SQL Server的SQLDMO组件来实现: .通过执行Sql语句来实现 注意,用Sq ...

  8. Lang语言包

    \languages\zh_cn\admin\common.php里配置后台所有常量

  9. jquery easy ui 学习 (9)Pagination in TreeGrid 分页

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. powerpoint2015如何调整PPT立体图形

    在powerpoint2016中,可以添加图片来丰富演说,但通常人们只会懂得插入平面图片.动态图片,立体图片就无法插入了吗?不是的,在powerpoint2016为我们准备了大量的预设,可以调整图片, ...