【Android自定义View】绘图之Path篇(二)

栏目: Android · 发布时间: 6年前

内容简介:上一篇,我们说了绘制基本的几何图形,这一篇我们说说绘制路径(Path)这里主要用到的方法是主要用到的方法

上一篇,我们说了绘制基本的几何图形,这一篇我们说说绘制路径(Path)

这里主要用到的方法是 canvas.drawPath(path, paint);

  • 1.直线

主要用到的方法

moveTo(float x, float y) 起始点

lineTo(float x, float y) 当前点直线的结束点,也是下条直线的起始点

close() 闭合

Paint paint = new Paint();
        paint.setColor(Color.RED);
        paint.setStrokeWidth(10);
        paint.setStyle(Paint.Style.FILL);

        Path path = new Path();
        path.moveTo(20, 20); //设定起始点
        path.lineTo(300, 100);//第1条直线
        path.lineTo(300, 300);//第2条直线
        path.close();//闭合
        canvas.drawPath(path, paint);
复制代码
【Android自定义View】绘图之Path篇(二)
  • 2.矩形

addRect(RectF rect, Direction dir)

addRect(float left, float top, float right, float bottom, Direction dir)

RectFfloat left, float top, float right, float bottom 是一样的, Direction 有2种方式, CWCCW ,其中 CW 表示顺时针, CCW 表示逆时针

Path ccw = new Path();
        RectF rect1 =  new RectF(50, 50, 300, 300);
        ccw.addRect(rect1, Path.Direction.CCW);//逆时针

        Path cw = new Path();
        RectF rect2 =  new RectF(350, 50, 600, 300);
        cw.addRect(rect2, Path.Direction.CW);//顺时针

        canvas.drawPath(ccw, paint);
        canvas.drawPath(cw, paint);
复制代码
【Android自定义View】绘图之Path篇(二)

看上去好像是一样的?其实是过程不一样,结果一样,细节的话,我们后面再说。

  • 3.圆角矩形

addRoundRect(RectF rect, float rx, float ry, Direction dir)

addRoundRect(float left, float top, float right, float bottom, float rx, float ry, Direction dir)

addRoundRect(RectF rect, float[] radii, Direction dir)

addRoundRect(float left, float top, float right, float bottom, float[] radii,Direction dir)

其中, radii 只能传入8个数值,多于8个不会有效果, rx 表示x方向的半径, ry 表示y方向的半径

Path ccw = new Path();
        RectF rect1 = new RectF(50, 50, 500, 500);
        float[] radii = {5, 20, 50, 100, 150, 200, 250, 300};
        ccw.addRoundRect(rect1, radii, Path.Direction.CCW);


        Path cw = new Path();
        RectF rect2 = new RectF(550, 50, 1000, 500);
        cw.addRoundRect(rect2, 10, 100, Path.Direction.CCW);

        canvas.drawPath(ccw, paint);

        paint.setColor(Color.BLUE);
        canvas.drawPath(cw, paint);
复制代码
【Android自定义View】绘图之Path篇(二)
  • 4.圆形

addCircle(float x, float y, float radius, Direction dir)

Path cw = new Path();
        cw.addCircle(200, 200, 100, Path.Direction.CW);
        canvas.drawPath(cw, paint);
复制代码
【Android自定义View】绘图之Path篇(二)
  • 5.椭圆

addOval(RectF oval, Direction dir)

addOval(float left, float top, float right, float bottom, Direction dir)

Path cw = new Path();
        RectF rect1 = new RectF(50, 50, 500, 300);
        cw.addOval(rect1, Path.Direction.CW);
        canvas.drawPath(cw, paint);
复制代码
【Android自定义View】绘图之Path篇(二)
  • 6.弧形

addArc(RectF oval, float startAngle, float sweepAngle)

addArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle)

startAngle 开始的角度,X轴正方向为0度

sweepAngel 持续的度数

Path cw = new Path();
        RectF rect1 = new RectF(50, 50, 500, 300);
        cw.addArc(rect1, 0, 180);
        canvas.drawPath(cw, paint);
复制代码
【Android自定义View】绘图之Path篇(二)
  • 7.带轨迹的文字

drawTextOnPath(String text, Path path, float hOffset,float vOffset, Paint paint)

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

index 表示开始位置

count 表示结束位置,可以对文字进行截取

hOffset 表示绘制位置离开始位置的偏移量

vOffset 表示绘制位置离开路径的偏移量

String text = "ABCDEFGHIJKLMNOPQRSTYVWXYZ";
        paint.setTextSize(72);

        Path ccw = new Path();
        RectF rect1 = new RectF(50, 50, 500, 500);
        ccw.addRect(rect1, Path.Direction.CCW);//逆时针

        Path cw = new Path();
        RectF rect2 = new RectF(650, 50, 1100, 500);
        cw.addRect(rect2, Path.Direction.CW);//顺时针

        canvas.drawPath(ccw, paint);
        canvas.drawPath(cw, paint);

        canvas.drawTextOnPath(text, ccw, 0, 0, paint);

        canvas.drawTextOnPath(text, cw, 0, 0, paint);
复制代码
【Android自定义View】绘图之Path篇(二)
这里就可以明显的看出 CCWCW

的区别了

修改 hOffsetvOffset

String text = "ABCDEFGHIJKLMNOPQRSTYVWXYZ";
        paint.setTextSize(72);

        Path ccw = new Path();
        RectF rect1 = new RectF(50, 50, 500, 500);
        ccw.addRect(rect1, Path.Direction.CCW);//逆时针

        Path cw = new Path();
        RectF rect2 = new RectF(650, 50, 1100, 500);
        cw.addRect(rect2, Path.Direction.CW);//顺时针

        canvas.drawPath(ccw, paint);
        canvas.drawPath(cw, paint);

        canvas.drawTextOnPath(text, ccw, 100, 0, paint);

        canvas.drawTextOnPath(text, cw, 0, 100, paint);
复制代码
【Android自定义View】绘图之Path篇(二)

可以看到, hOffset 表示绘制位置离开始位置的偏移量, vOffset 表示绘制位置离开路径的偏移量, vOffset 越大,离圆心越近。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程珠玑(续)(修订版)

编程珠玑(续)(修订版)

【美】Jon Bentley 乔恩•本特利 / 钱丽艳、刘田 / 人民邮电出版社 / 2015-2 / CNY 35.00

历史上最伟大的计算机科学著作之一 融深邃思想、实战技术与趣味轶事于一炉的奇书 带你真正领略计算机科学之美 多年以来,当程序员们推选出最心爱的计算机图书时,《编程珠玑》总是位于前列。正如自然界里珍珠出自细沙对牡蛎的磨砺,计算机科学大师Jon Bentley以其独有的洞察力和创造力,从磨砺程序员的实际问题中凝结出一篇篇不朽的编程“珠玑”,成为世界计算机界名刊《ACM通讯》历史上最受欢......一起来看看 《编程珠玑(续)(修订版)》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具