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. 利用Range改变光标位置

    先上代码,代码取自网上某插件中 function caret(begin, end) { if (this.length == 0) return; if (typeof begin == 'numb ...

  2. MSChart使用之动态生成多个多行ChartArea

    前台代码: <asp:Chart ID=" > <Titles> <asp:Title Name="Title1" runat=" ...

  3. iOS开发网络资源整理-持续更新

    本文记录iOS开发相关的网络社区和博客 1.objc中国 网址:http://objccn.io 简介:onevcat创建,项目的成立源于国内 Objective-C 社区对 objc.io 的翻译活 ...

  4. Swift - 30 - 可变参数

    //: Playground - noun: a place where people can play import UIKit // 可变参数一定要放在所有定义参数的最后面, 和其他参数的定义方式 ...

  5. CSS 布局Float 【2】

    1.页面标准文档流.浮动层.float属性 1.1 文档流 HTML页面的标准文档流(默认布局)是:从上到下,从左到右,遇块(块级元素)换行. 1.2 浮动层 浮动层:给元素的float属性赋值后,就 ...

  6. 最全java的读写操作(转载)

    Java的I/O系统中的输入输出流为我们进行开发提供了很多便利,利用其强大的封装性,通过各种组合能够实现多种多样的功能.但是Java提供了很多输入输出流类,在概念和使用上有很多相似之处,所以给很多开发 ...

  7. MySQL Server 5.6 解压版安装配置

    MySQL解压版下载地址为: http://dev.mysql.com/downloads/mysql/5.6.html#downloads 安装及配置步骤: ①将MySQL的zip包解压到路径C:\ ...

  8. Linux安装Monaco字体

    Linux安装字体的方式其实很简单,就是调用 fc-cache -f -v 命令,其实我们可以什么都不添加直接调用这个命令可以看到它会去/usr/share/fonts/truetype等目录以及你自 ...

  9. FindBugs的Eclipse插件安装与使用

    1.FindBugs介绍 FindBugs是一款Java静态代码分析工具,与其他静态分析工具(如Checkstyle和PMD)不同,FindBugs 不注重样式或者格式,它专注于寻找真正的缺陷或者潜在 ...

  10. hibernate的get、load的方法的区别,IllegalArgument异常

    关于hibernate中的load,get,以及延迟加载问题 今天在使用hibernate时,发现一异常: could not initialize proxy - no Session 查询资料之后 ...