精通Android自定义View(八)绘制篇Canvas分析之绘制文本

 

1 简述

绘制文字分为三种应用场景:

  • 情况1:指定文本开始的位置
  1. 即指定文本基线位置
  2. 基线x默认在字符串左侧,基线y默认在字符串下方
  • 情况2:指定每个文字的位置
  • 情况3:指定路径,并根据路径绘制文字

下面分别细说:

文字的样式(大小,颜色,字体等)具体由画笔Paint控制,详细请会看上面基础的介绍

2 绘制

2.1 指定文本开始的位置

//从点(300,400)处开始绘制
canvas.drawText("abcdefg",300,400,mPaint);
        // 仅绘制文本的一部分
        // 参数start,end:指定绘制文本的位置
        // 位置以下标标识,由0开始
        //public void drawText (String text, int start, int end, float x, float y, Paint paint)
        //public void drawText (CharSequence text, int start, int end, float x, float y, Paint paint)

        // 对于字符数组char[]
        // 截取文本使用起始位置(index)和长度(count)
        //public void drawText (char[] text, int index, int count, float x, float y, Paint paint)

        // 实例:绘制从位置1-3的文本
        canvas.drawText("abcdefg",1,4,300,400,mPaint);

        // 字符数组情况
        // 字符数组(要绘制的内容)
        char[] chars = "abcdefg".toCharArray();

        // 参数为 (字符数组 起始坐标 截取长度 基线x 基线y 画笔)
        canvas.drawText(chars,1,3,200,500,mPaint);
        // 效果同上

2.2 分别指定文本的位置

使用函数

// 参数text:绘制的文本
// 参数pos:数组类型,存放每个字符的位置(坐标)
// 注意:必须指定所有字符位置
 public void drawPosText (String text, float[] pos, Paint paint)

// 对于字符数组char[],可以截取部分文本进行绘制
// 截取文本使用起始位置(index)和长度(count)
    public void drawPosText (char[] text, int index, int count, float[] pos, Paint paint)

// 特别注意:
// 1. 在字符数量较多时,使用会导致卡顿
// 2. 不支持emoji等特殊字符,不支持字形组合与分解

案例

        // 实例
        canvas.drawPosText("abcde", new float[]{
                100, 100,    // 第一个字符位置
                200, 200,    // 第二个字符位置
                300, 300,    // ...
                400, 400,
                500, 500
        }, mPaint);




    // 数组情况(绘制部分文本)
        char[] chars = "abcdefg".toCharArray();

        canvas.drawPosText(chars, 1, 3, new float[]{
                300, 300,    // 指定的第一个字符位置
                400, 400,    // 指定的第二个字符位置
                500, 500,    // 指定的第三个字符位置

        }, mPaint);

 

2.3 指定路径,并根据路径绘制文字

        // 在路径(540,750,640,450,840,600)写上"绘制图片分为:绘制矢量图(drawPicture)和 绘制位图(drawBitmap)"字样
        // 1.创建路径对象 当然这个应该在初始化函数那里创建
        Path path = new Path();
        // 2. 设置路径轨迹
        path.cubicTo(540, 750, 640, 450, 840, 600);
        // 3. 画路径
        //canvas.drawPath(path,mPaint2);
        // 4. 画出在路径上的字
        canvas.drawTextOnPath("绘制图片分为:绘制矢量图(drawPicture)和 绘制位图(drawBitmap)", path, 50, 0, mPaint);

 

早起的年轻人 CSDN认证博客专家 移动开发 项目管理 Java
只要用心去做,每一件事情还是有可能成功的,当然成功是没有界限的,只不过是达到自己心里的那个目标,公众号:我的大前端生涯,一个爱喝茶的程序员,通常会搞搞SpringBoot 、Herbinate、Mybatiys、Android、iOS、Flutter、Vue、小程序等.
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页