自定义控件详解(七):drawText()
比较基础的一个方法。即绘制文本
使用如下:
Paint paint = new Paint(); paint.setColor(Color.RED); // 红色字体
paint.setStyle(Paint.Style.FILL); // 类型
paint.setStrokeWidth(); // 画笔线条宽度
paint.setTextSize(); // 绘制文本大小
// 绘制内容
canvas.drawText("听着music睡 ' blogs" , , , paint);
效果;

可以看下方法:

这篇只讨论第三个方法。
可以看到 4个参数,第二个、第三个参数 是float类型,实际上就是 绘制的文本的绘制参考坐标。注意这个坐标 不是文本的左上角的那个点,float y 代表 基线的Y位置。
验证一下:
绘制一条蓝色的基线,绘制一个文本。
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.FILL);
paint.setStrokeWidth(1);
paint.setTextSize(60);
int baseLine = 100 ;// 基线的Y坐标
canvas.drawText("abcdefghi",30 , baseLine , paint); // 绘制 (30,baseLine) 为参考点的文本
paint.setColor(Color.BLUE);
canvas.drawLine(30,baseLine ,300,baseLine,paint); // 绘制基线
可以看到,绘制文本的参数(floatx , floaty) 指的是基线的左起点坐标而不是左上角。

扩展:
drawtext除了基线还有另外4条线,称为4格线。
分别是ascent,descent,top,bottom
- ascent: 系统建议的,绘制单个字符时,字符应当的最高高度所在线
- descent:系统建议的,绘制单个字符时,字符应当的最低高度所在线
- top: 可绘制的最高高度所在线
- bottom: 可绘制的最低高度所在线
怎么获取这4个线的y轴坐标呢,有一个类 FontMetrics

这些属性的值即 与基线的相对y轴距离(可能为负值)
示例:
int baseLineY = 100 ;
Paint.FontMetrics fm = paint.getFontMetrics();
float ascent = baseLineY + fm.ascent ; // 制顶线
float descent = baseLineY+fm.descent ; //制低线
float top = baseLineY + fm.top ; // 最顶线
float bottom = baseLineY + fm.bottom ; // 最低限
// 基线
paint.setColor(Color.RED);
canvas.drawLine(baseLineX , baseLineY , 1000 , baseLineY , paint);
// 制顶线
paint.setColor(Color.BLUE);
canvas.drawLine(baseLineX,ascent , 1000 , ascent , paint);
// 制底线
paint.setColor(Color.GREEN);
canvas.drawLine(baseLineX,descent , 1000 , descent , paint);
// 最顶线
paint.setColor(Color.YELLOW);
canvas.drawLine(baseLineX,top,1000,top , paint);
// 最底线
paint.setColor(Color.MAGENTA);
canvas.drawLine(baseLineX , bottom , 1000 , bottom ,paint);
//写文字
paint.setColor(Color.BLACK);
canvas.drawText("听着music睡 ' blogs" ,baseLineX,baseLineY , paint);
可以看到:
黄色的最顶线top
蓝色的制顶线ascent
红色的基线baseline
绿色的制低线descent
粉色的最低限bottom

自定义控件详解(七):drawText()的更多相关文章
- 《Android群英传》读书笔记 (2) 第三章 控件架构与自定义控件详解 + 第四章 ListView使用技巧 + 第五章 Scroll分析
第三章 Android控件架构与自定义控件详解 1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWin ...
- Iptables详解七层过滤
<Iptables详解七层过滤> 一.防火墙简介 防火墙其实就是一个加固主机或网络安全的一个设备或者软件而已,通过防火墙可以隔离风险区域与安全区域的连接,同时不会妨碍风险区域的访问.当然需 ...
- WindowsPhone自定义控件详解(二) - 模板类库分析
转自:http://blog.csdn.net/mr_raptor/article/details/7251948 WindowsPhone自定义控件详解(一) - 控件类库分析 上一节主要分析了控件 ...
- Xamarin+Prism开发详解七:Plugin开发与打包测试
有了上章[Xamarin+Prism开发详解六:DependencyService与IPlatformInitializer的关系]的基础,现在来理解Plugin开发就简单了. 本文实例代码地址:ht ...
- 自定义控件详解(一):Paint类与Canvas类
前言: 自定义控件必需的两个类:Paint与Canvas Paint --- 相当于绘图的"笔" Canvas --- 相当于绘图的"纸" 一.Pain ...
- 第二章 控件架构与自定义控件详解 + ListView使用技巧 + Scroll分析
1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWindow将DecorView作为整个应用窗口的根V ...
- 自定义控件详解(六):Paint 画笔MaskFilter过滤
首先看一个API:setMaskFilter(MaskFilter maskfilter): 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等. 以下有两个Ma ...
- 自定义控件详解(五):onMeasure()、onLayout()
前言: 自定义控件的三大方法: 测量: onMeasure(): 测量自己的大小,为正式布局提供建议 布局: onLayout(): 使用layout()函数对所有子控件布局 绘制: onDraw() ...
- WindowsPhone自定义控件详解(一) - 控件类库分析
转自:http://blog.csdn.net/mr_raptor/article/details/7251942 为了让你的应用程序更有个性,我们通常会在WP7开发过程中会自定义自己风格的控件,自定 ...
随机推荐
- SAX解析文件
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import ja ...
- Python第一天自学,变量,基本数据类型
PyCharm 一些简单常用设置操作设置模板 File->Settings->Editor->File and Code Templates //切换python版本File-> ...
- Python 单向链表、双向链表
用面向对象实现Linkedlist链表 单向链表实现append.iternodes 双向链表实现append.pop.insert.remove.iternodes 单向链表与双向链表 单向链表: ...
- overflow-x: scroll;横向滑动详细讲解
overflow-x: scroll;横向滑动(移动端使用详解) css3 , ie8以上 <!DOCTYPE html> <html lang="en"> ...
- Drools文档(八) 规则语言参考
规则语言参考 概述 Drools有一个"本地"的规则语言.这种格式在标点符号上非常轻,并且通过"扩展器"支持自然语言和领域特定的语言,使语言能够变形到您的问题领 ...
- gulp基础操作实践
按照gulp中文文档对gulp基础操作的一些实践练习,记录以防忘掉. 一,选择并输出文件:gulp.src(globs[,options]) eg:gulp.src('src/less/index.l ...
- memcached一致性哈希及php客户端实现
1.memcached分布式算法 memcached的分布式是依靠客户端的算法来实现,假设键名为$key,服务器数量为N,常规的实现方式有两种: 取模哈希 crc32($key)%N,通过这个算法将键 ...
- 2017计算机学科夏令营上机考试-B编码字符串
B:编码字符串 总时间限制: 1000ms 内存限制: 65536kB 描述 在数据压缩中,一个常用的方法是行程长度编码压缩.对于一个待压缩的字符串,我们可以依次记录每个字符及重复的次数.例如,待 ...
- km算法入门
本文知识均由笔者自学,文章有错误之处请不吝指出. 笔者刷数模题的时候有一道题考到了"二分图最大权分配",需要用到KM算法,但是书上对KM算法的介绍又臭又长,更何况有些同学" ...
- Apache服务器配置
之前做代码一直按照传统化的方法部署别人的网站,但是一直不成功,尝试了很多次最后才发现时虚拟主机的问题 使用apache默认为127.0.0.1和网站的配置发生冲突. 因此在apache的conf文件夹 ...