Android PathEffect画笔绘制效果

一、介绍

PathEffect共有6个子类

CornerPathEffect:         拐角圆滑

DashPathEffect:            线段虚化

DiscretePathEffect:        打散线段

PathDashPathEffect:    自定义图形实现线段虚化

ComposePathEffect:    组合效果

SumPathEffect:                叠加效果

Android PathEffect画笔绘制效果

二、举例

1.Paint、PathEffect设置

paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(3);
paint.setColor(Color.RED);

PathEffect pathEffect[] = new PathEffect[6];

我们先声明一个pathEffect数组,分别实例化,最后通过for循环分别绘制各自的效果

这里先给出for循环,下面只给出介绍和实例化

//画布向(70,70)点平移
canvas.translate(70,70);
for (int i = 0; i < pathEffect.length; i++){
    paint.setPathEffect(pathEffect[i]);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(5);

    //划线
    paint.setColor(Color.WHITE);
    canvas.drawLine(0,0,300,0,paint);
    //画矩形
    paint.setColor(Color.YELLOW);
    canvas.drawRect(330,-50,430,50,paint);
    //画圆
    paint.setColor(Color.RED);
    canvas.drawCircle(510, 0,50,paint);
    canvas.translate(0,150);
}

2.CornerPathEffect:         拐角圆滑

//0. CornerPathEffect:这个类的作用就是将Path的各个连接线段之间的夹角用一种更平滑的方式连接
// CornerPathEffect(float radius)
// 参数:
// radius指定一个具体的圆弧半径来实例
pathEffect[0] = new CornerPathEffect(10);
Android PathEffect画笔绘制效果

3.DashPathEffect:            线段虚化

//1. DashPathEffect:将Path的线段虚线化,
// DashPathEffect(float[] intervals, float offset),
// 参数:
// intervals为虚线的ON和OFF数组,必须是偶数长度,且数组的length>=2,指定了多少长度的实线之后再画多少长度的空白,偶数脚码为实线,奇数脚码虚线
// phase为绘制时的偏移量。
float intervals[] = new float[]{10,20,30,20,10};
pathEffect[1] = new DashPathEffect(intervals,10);
Android PathEffect画笔绘制效果

4.DiscretePathEffect:        打散线段

//2. DiscretePathEffect:打散Path的线段,使得在原来路径的基础上发生打散效果。
//DiscretePathEffect(float segmentLength,float deviation)来构造一个实例,
// 参数
// segmentLength指定最大的段长,
// deviation指定偏离量
pathEffect[2] = new DiscretePathEffect(15f,15f);
Android PathEffect画笔绘制效果

5.PathDashPathEffect:    自定义图形实现线段虚化

//3. PathDashPathEffect:DashPathEffect差不多,不同的是PathDashPathEffect可以通过自定义图形来填充当前的路径,
// PathDashPathEffect (Path shape, float advance, float phase,PathDashPathEffect.Stylestyle)。
// shape则是指填充图形,
// advance指每个图形间的间距,
// phase为绘制时的偏移量,
// style为该类*的枚举值,有三种情况:Style.ROTATE、Style.MORPH和Style.TRANSLATE。
// ROTATE:线段连接处的图形转换以旋转到与下一段移动方向相一致的角度进行转转,
// MORPH :时图形会以发生拉伸或压缩等变形的情况与下一段相连接,
// TRANSLATE:图形会以位置平移的方式与下一段相连接。

//用矩形填充
Path tempPath = new Path();
tempPath.addRect(0,0,8,8,Path.Direction.CCW);
pathEffect[3] = new PathDashPathEffect(tempPath,12,0,PathDashPathEffect.Style.ROTATE);

Android PathEffect画笔绘制效果

6.ComposePathEffect:    组合效果

//4. ComposePathEffect:组合效果,
// ComposePathEffect (PathEffect outerpe,PathEffect innerpe),
// 参数:两个PathEffect
// 表现时,会首先将innerpe表现出来,然后再在innerpe的基础上去增加outerpe的效果。
pathEffect[4] = new ComposePathEffect(pathEffect[3],pathEffect[2]);
Android PathEffect画笔绘制效果

7.SumPathEffect:                叠加效果

//5. SumPathEffect:叠加效果,
// SumPathEffect(PathEffect first,PathEffect second)
// 参数:两个PathEffect作为参数
// 分别对两个参数的效果各自独立进行表现,然后将两个效果简单的重叠在一起显示出来。
pathEffect[5] = new SumPathEffect(pathEffect[3],pathEffect[2]);

Android PathEffect画笔绘制效果