您的位置:首页 > 移动开发 > Android开发

自定义View起步:Canvas之绘制文字

2017-04-13 21:45 375 查看
        上一章节讲解了,Canvas如何绘制图片。本章节将会讲解如何利用Canvas绘制文字。绘制文字的方法比较简单,相信今天这一章节都可以看得懂。首先我们来看一下官网为我们提供了那些API来提供给我们使用。

第一类:基本的文字绘制





第二类:对文字进行排序





第三类:按照Path路径来绘制文字





通过上面常用方法的参数也可看出,绘制文字也是需要画笔的,而且文字的大小,颜色,字体,对齐方式都是由画笔控制的。不过嘛这里仅简单介绍几种常用方法(反正挖坑多了也不怕),具体在讲解Paint时再详细讲解。使用Paint可以绘制出更佳酷炫效果的文字出来。

Paint文本相关常用方法表



第一类(drawText)

第一类可以指定文本开始的位置,可以截取文本中部分内容进行绘制。其中x,y两个参数是指定文本绘制两个基线,示例:

/**
* 第一种方法,绘制文字,后边的200,500参数为绘制文字的基准线的位置
*200表示文字左侧距离Group位置,500表示文字底部距离Group顶部的位置
*/
String tr = "ABCDEFJHK";
canvas.drawText(tr,200,300,mPaint);




PS: 图中字符串下方的红线是基线y,基线x未在图中画出。

当然啦,除了能指定绘制文本的起始位置,还能只取出文本中的一部分内容进行绘制。截取文本中的一部分,对于String和CharSequence来说只指定字符串下标start和end位置(注意:0<= start < end < str.length())

/**
* 第二种方法,绘制文字,增加了两个参数,1和3表示截取字符串
* 从第1个开始截取到第三个,不包括第三个
*/
mPaint.setColor(Color.RED);
canvas.drawText(tr,1,3,200,400,mPaint);




另外,对于字符数组char[]我们截取字符串使用起始位置(index)和长度(count)来确定。同样,我们指定index为1,count为3,那么最终截取到的字符串是"BCD"。其实就是从下标位置为1处向后数3位就是截取到的字符串,示例:

/**
* 第三种方法,绘制字符串数组,两个参数,1和3表示截取字符串
* 从第1个开始截取三个
*/
mPaint.setColor(Color.BLUE);
char[] chars = tr.toCharArray();
canvas.drawText(chars,1,3,200,500,mPaint);




第二类方法:(drawTextRun)

这个方法是API23之后添加的,他可以根据传入的boolean值来决定是否排序,排序的内容由截取的字符串决定。示例:

/**
* 第五种方法,为字符串排序
* API23之后引入的方法
* 前两个0,3表示截取0-3的字符串,后两个0-3表示从0-3开始排序必须和前边两个参数保持一致
* true表示排序,false表示不排序
* */
mPaint.setColor(Color.BLACK);
canvas.drawTextRun(str,0,3,0,3,200,950,true,mPaint);
canvas.drawTextRun(str,0,3,0,3,200,1000,false,mPaint);




第三类(drawTextOnPath)

第三类方法顾名思义是可以根据Path路径来绘制文字。这样我们就可以绘制出各种形状排列的文字。示例:

/**
* 第六种方法,按照规定的路径绘制字符串
* tr:绘制的字符串
* mPath绘制的路径,
* 10,X轴的偏移量
* -10,Y轴的偏移量
* mPaint画笔
* */
//绘制一条线
mPath = new Path();
mPath.moveTo(200,1100);
mPath.lineTo(800,1400);
mPaint.setColor(Color.CYAN);
canvas.drawTextOnPath(tr,mPath,10,-10,mPaint);

//绘制一个圆
String s = "ABCDEFGHIJKLMNOPQRST";
Path path = new Path();
path.addCircle(700,500,200, Path.Direction.CW);
canvas.drawTextOnPath(s,path,0,-10,mPaint);




文字的绘制就先讲到这里,我们知道绘制文字关键的两个类,分别是Pain画笔和Path路径,这两个类还有很多方法供我们使用,通过这两个类的设置可以绘制出更多复杂和绚丽的效果。后面我会着重详细讲解这两个类的使用。喜欢我的文章可以扫描下方的二维码关注我的微信公众号,获得更多,更及时的文章推送。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息