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

        上一章节讲解了,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路径,这两个类还有很多方法供我们使用,通过这两个类的设置可以绘制出更多复杂和绚丽的效果。后面我会着重详细讲解这两个类的使用。喜欢我的文章可以扫描下方的二维码关注我的微信公众号,获得更多,更及时的文章推送。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值