/**
* 设置绘制路径的效果,如点画线等
* setPathEffect(PathEffect effect);
*/
1、//CornerPathEffect—-圆形拐角效果
/**
* 利用半径R=5的圆来代替原来两条直线间的夹角
*/
CornerPathEffect cornerPathEffect = new CornerPathEffect(10);
paint.setPathEffect(cornerPathEffect);
2、//DashPathEffect——虚线效果
/**
* public DashPathEffect(float intervals[], float phase)
* intervals[]:表示组成虚线的各个线段的长度;整条虚线就是由intervals[]中这些基本线段循环组成的。
* phase:开始绘制的偏移值
* 比如,我们定义new float[] {20,10};那这个虚线段就是由两段线段组成的,第一个可见的线段长为20,每二个线段不可见,长度为10;
*/
DashPathEffect dashPathEffect = new DashPathEffect(new float[]{30,30},0);
paint.setPathEffect(dashPathEffect);
3、//DiscretePathEffect(2,5)
/**
* 把原有的路线,在指定的间距处插入一个突刺
* 第一个这些突出的“杂点”的间距,值越小间距越短,越密集
* 第二个是突出距离
*/
DiscretePathEffect discretePathEffect = new DiscretePathEffect(2,5);
paint.setPathEffect(discretePathEffect);canvas.drawPath(path,paint);
4、//利用ComposePathEffect先应用圆角特效,再应用虚线特效
canvas.translate(0,300);
ComposePathEffect composePathEffect = new ComposePathEffect(dashPathEffect,cornerPathEffect);
paint.setPathEffect(composePathEffect);
canvas.drawPath(path,paint);
5、//利用SumPathEffect,分别将圆角特效应用于原始路径,然后将生成的两条特效路径合并
canvas.translate(0,300);
paint.setStyle(Paint.Style.STROKE);
SumPathEffect sumPathEffect = new SumPathEffect(cornerPathEffect,dashPathEffect);
paint.setPathEffect(sumPathEffect);
canvas.drawPath(path,paint);
6、//PathDashPathEffect
/**
* 利用以另一个路径为单位,延着路径盖章.相当于PS的印章工具
*/
public class PathDashPathView extends View {
public PathDashPathView(Context context, AttributeSet attrs) {
super(context, attrs);
}
int dx =0 ;
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// canvas.drawPath(getStampPath1(),getPaint());
//
drawPathDashPathEffect(canvas);
dx++;
// invalidate();
}
private Paint getPaint(){
Paint paint = new Paint();
paint.setStrokeWidth(4);
paint.setColor(Color.GREEN);
paint.setStyle(Paint.Style.STROKE);
paint.setAntiAlias(true);
return paint;
}
private void drawPathDashPathEffect(Canvas canvas){
Paint paint = getPaint();
Path path = new Path();
path.moveTo(100,600);
path.lineTo(400,150);
path.lineTo(700,900);
canvas.drawPath(path,paint);
canvas.translate(0,200);
/**
* 利用以另一个路径为单位,延着路径盖章.相当于PS的印章工具
*/
paint.setPathEffect(new PathDashPathEffect(getStampPath(),35,dx, PathDashPathEffect.Style.MORPH));
canvas.drawPath(path,paint);
canvas.translate(0,400);
paint.setPathEffect(new PathDashPathEffect(getStampPath(),35,dx, PathDashPathEffect.Style.ROTATE));
canvas.drawPath(path,paint);
canvas.translate(0,400);
paint.setPathEffect(new PathDashPathEffect(getStampPath(),35,dx, PathDashPathEffect.Style.TRANSLATE));
canvas.drawPath(path,paint);
}
private Path getStampPath(){
// Path path = new Path();
// path.moveTo(0,20);
// path.lineTo(10,0);
// path.lineTo(20,20);
// path.close();
//
Path path = new Path();
path.moveTo(0,60);
path.lineTo(60,60);
path.lineTo(40,0);
path.lineTo(20,0);
path.close();
// path.addCircle(0,0,5, Path.Direction.CCW);
//空心
float RECT_WIDTH = 42;
float RECT_HEIGHT = 18;
float RECT_BORDER_WIDTH = 6;
Path pathStamp = new Path();
pathStamp.moveTo(-RECT_WIDTH / 2, 0);
pathStamp.lineTo(0, RECT_HEIGHT / 2);
pathStamp.lineTo(RECT_WIDTH / 2, 0);
pathStamp.lineTo(0, -RECT_HEIGHT / 2);
pathStamp.close();
pathStamp.moveTo(-RECT_WIDTH / 2 + RECT_BORDER_WIDTH, 0);
pathStamp.lineTo(0, -RECT_HEIGHT / 2 + RECT_BORDER_WIDTH / 2);
pathStamp.lineTo(RECT_WIDTH / 2 - RECT_BORDER_WIDTH, 0);
pathStamp.lineTo(0, RECT_HEIGHT / 2 - RECT_BORDER_WIDTH / 2);
pathStamp.close();
return pathStamp;
}
private Path getStampPath1(){
// Path path = new Path();
// path.moveTo(0,100);
// path.lineTo(50,0);
// path.lineTo(100,100);
// path.close();
// path.addCircle(50,50,20, Path.Direction.CCW);
Path path = new Path();
path.moveTo(0,60);
path.lineTo(60,60);
path.lineTo(40,0);
path.lineTo(20,0);
path.close();
path.addCircle(0,0,10, Path.Direction.CCW);
return path;
}