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. 很棒的jQuery代码片段分享

    jQuery实现的内链接平滑滚动 不需要使用太复杂的插件,只要使用下载这段代码即可实现基于内部链接的平滑滚动 $('a[href^="#"]').bind('click.smoot ...

  2. 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序(Oledb)

    转载:http://blog.csdn.net/lemontec/article/details/1754413 前几天用c#读 Excel 出现了如下问题未在本地计算机上注册“Microsoft.J ...

  3. 黑马程序员-ReadInt

    判断输入的字符串是否为数字. namespace 读入一个整数 { class Program { static void Main(string[] args) { Console.WriteLin ...

  4. android launcher3 home页简易分析

    最近在修改一个问题:就是修改home页下,用户手动拖出来的APP图片下面的字体显示不全,思路比较明确,需要尽量加大整个APP控件的高度,或者缩小图片和文字之间的间隔. 跟代码发现APP整个控件的lay ...

  5. nuc900 nand flash mtd 驱动

    nuc900 nand flash mtd 驱动,请参考! /* * Copyright © 2009 Nuvoton technology corporation. * * Wan ZongShun ...

  6. K-means聚类

    聚类算法,无监督学习的范畴,没有明确的类别信息. 给定n个训练样本{x1,x2,x3,...,xn} kmeans算法过程描述如下所示: 1.创建k个点作为起始质心点,c1,c2,...,ck 2.重 ...

  7. Windows下Apache部署Django过程记录

    Win7/Apache/Python2.7/Django1.9部署Web   环境: Windows7 Apache httpd-2.4.16-win64-VC14 Python2.7.11 Djan ...

  8. python中的builtin函数详解-第二篇

    classmethod(function) 这里不过多说明这个builtin方法的具体用法,python的文档和help函数已经给了这个方法充足的使用说明,所以我这里要说的时关于 classmetho ...

  9. JQuery Dialog(JS模态窗口,可拖拽的DIV) 效果实现代码

    效果图 调用示意图   交互示意图 如上图所示,这基本是JQueryDialog的完整逻辑流程了. 1.用户点击模态窗口的“提交”按钮时,调用JQueryDialog.Ok()函数,这个函数对应了用户 ...

  10. RAID磁盘阵列0、1、5、10

    raid0:(又称为Stripe或Striping--分条) (一句话:raid0 用多个磁盘串联起来成一个大磁盘,容量为几个的总和.优点:容量大,速度快.缺点:数据不安全) 即Data Stripp ...