public class
PathEffect
extends Object
java.lang.Object
↳ android.graphics.PathEffect
Known Direct Subclasses
ComposePathEffect, CornerPathEffect, DashPathEffect, DiscretePathEffect, PathDashPathEffect, SumPathEffect
通过调用Paint的方法setPathEffect(PathEffect effect)设置路径的绘制效果,effect可以为null。
ComposePathEffect:构造函数ComposePathEffect (PathEffect outerpe, PathEffect innerpe)。组合效果,首先会将innerpe表现出来,然后变现出来outerpe。
CornerPathEffect:构造函数CornerPathEffect(float radius)。这个类的作用是将各个线段连接处的夹角变成圆角,radius是这个圆角的半径。
DashPathEffect:构造函数DashPathEffect(float[] intervals, float phase)。这个类是将所绘制的线条虚线化。intervals为一个2倍数的数组,奇数部分为线的长度,偶数部分为虚线中空白的长度。完整的虚线由intervals循环调用产生。phase:偏移量。
代码片段:
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(3);
paint.setColor(Color.BLACK);
canvas.drawColor(Color.WHITE);
DashPathEffect dashPathEffect = new DashPathEffect(new float[]{300,200,100,10},0);
Path path = new Path();
paint.setPathEffect(dashPathEffect);
path.moveTo(10,100);
path.lineTo(getWidth() - 10, 100);
canvas.drawPath(path,paint);
}
效果图如下:
DiscretePathEffect:构造函数DiscretePathEffect(float segmentLength, float deviation)。这个类的作用是打散Path的线段,使得在原来路径的基础上发生打散效果,segmentLength每段长度,deviation偏离量。
PathDashPathEffect:构造函数PathDashPathEffect(Path shape, float advance, float phase, PathDashPathEffect.Style style)。shape用于绘制的形状,advance两个形状间的距离,phase偏移量,style有三种情况:Style.ROTATE、Style.MORPH和Style.TRANSLATE。ROTATE:线段连接处的图形转换以旋转到与下一段移动方向相一致的角度进行转转;MORPH:图形会以发生拉伸或压缩等变形的情况与下一段相连接,TRANSLATE:图形会以位置平移的方式与下一段相连接。
代码片段:
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
//此处注意setStrokeWidth的宽度要大于shape中矩形的高度。
paint.setStrokeWidth(100);
paint.setColor(Color.BLACK);
canvas.drawColor(Color.WHITE);
//定义一个矩形的path
Path shape = new Path();
shape.addRect(0, 0, 20,10,Path.Direction.CW);
PathDashPathEffect pathDashPathEffect = new PathDashPathEffect(shape,50,0,PathDashPathEffect.Style.MORPH);
//定义一条从左到右的直线
Path path = new Path();
paint.setPathEffect(pathDashPathEffect);
path.moveTo(10,100);
path.lineTo(getWidth() - 10, 100);
canvas.drawPath(path,paint);
}
效果图:
SumPathEffect:构造函数SumPathEffect(PathEffect first, PathEffect second)。与ComposePathEffect不同的是,SumPathEffect会将两个效果单独绘制,然后叠加在一起。