Android高级进阶——绘图篇(二)Canvas绘制文本 drawText详解

开篇

上篇介绍了 Canvas 的基本操作,绘制圆、矩形、椭圆、弧等,Canvas 除了这些操作还有两个比较重量级的绘制能力 Text(文本)Path(路径),今天就先看一下 Text 的绘制

先看一下 Paint 对于 Text 都提供了那些设置吧:

Paint 对于 Text 的相关设置

  • 普通设置

    paint.setStrokeWidth(5):设置画笔宽度
    paint.setAntiAlias(true):设置是否使用抗锯齿功能,如果使用,会导致绘图速度变慢
    paint.setStyle(Paint.Style.FILL):设置绘图样式,对于设置文字和几何图形都有效,可取值有三种 :1、Paint.Style.FILL:填充内部 2、Paint.Style.FILL_AND_STROKE:填充内部和描边 3、Paint.Style.STROKE:仅描边
    paint.setTextAlign(Align.CENTER):设置文字对齐方式
    paint.setTextSize(12):设置文字大小

  • 样式设置

    paint.setFakeBoldText(true):设置是否为粗体文字
    paint.setUnderlineText(true):设置下划线
    paint.setTextSkewX((float) -0.25):设置字体水平倾斜度,普通斜体字是 -0.25
    paint.setStrikeThruText(true):设置带有删除线效果

  • 其他设置

    paint.setTextScaleX(2):设置水平拉伸,高度不会变

使用 Canvas 绘制文字

  • 1、普通水平绘制

void drawText (String text, float x, float y, Paint paint)
void drawText (CharSequence text, int start, int end, float x, float y, Paint paint)
void drawText (String text, int start, int end, float x, float y, Paint paint)
void drawText (char[] text, int index, int count, float x, float y, Paint paint)

说明:
- 第一个构造函数时最简单的构造函数
- 第三、四个构造函数:实现截取一部分字体绘图
- 第二个构造函数最强大,因为传入的可以是 CharSequence 类型字体,所以可以实现绘制带图片的扩展文字,而且还能截取一部分绘制

这几个函数都比较简单,就不在具体演示了

  • 2、指定各个文字位置

void drawPosText (char[] text, int index, int count, float[] pos, Paint paint)
void drawPosText (String text, float[] pos, Paint paint)

参数:
- char[] text:要绘制的文字数组
- int index:第一个要绘制的文字的索引
- int count:要绘制的文字的个数,用来算最后一个文字的位置,从第一个绘制的文字开始算起
- float[] pos:每个字体的位置,两个为一组

onDraw 方法:

    private void init() {
        //初始化画笔
        paint = new Paint();
        paint.setTextSize(50);
        paint.setColor(Color.RED);
        paint.setStyle(Paint.Style.STROKE);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawPosText("巴扎黑", new float[]{
  100, 100, 100, 200, 100, 300}, paint);
    }

image.png

  • 3、沿路径绘制

    void drawTextOnPath (String text, Path path, float hOffset, float vOffset, Paint paint)
    void drawTextOnPath (char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)


参数:
  • Path path:文字的绘制路径
  • char[] text:要绘制的文字数组
  • int index:第一个要绘制的文字的索引
  • int count:要绘制的文字的个数,用来算最后一个文字的位置,从第一个绘制的文字开始算起
  • float hOffset:与路径起始点的水平偏移距离
  • float vOffset:与路径中心点的垂直偏移量

onDraw 方法:

    private void init() {
        //初始化画笔
        paint = new Paint();
        paint.setTextSize(50);
        paint.setColor(Color.RED);
        paint.setStyle(Paint.Style.STROKE);
        path = new Path();
        //设置路径,以圆作为我们文本显示的路线
        path.addCircle(300, 300, 200, Path.Direction.CW);  //路径的绘制方式 CW 表示正序绘制,CCW表示倒序绘制

        path1 = new Path();
        path1.addCircle(800, 300, 200, Path.Direction.CW);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //绘制出路径原型,方便后面比较
        canvas.drawPath(path, paint);
        canvas.drawPath(path1, paint);
        //把文字绘制在要显示的路径上,默认不偏移
        canvas.drawTextOnPath("搞笑我们是认真的!!!", path, 0, 0, paint);
        //把文字绘制在要显示的路径上,路径起始点偏移150,中心垂直点偏移 50
        canvas.drawTextOnPath("搞笑我们是认真的!!!", path1, 150, 
  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值