Paint setPathEffect(PathEffect effect)设置绘制路径的效果

来源:互联网 发布:家具行业进销存软件 编辑:程序博客网 时间:2024/05/22 08:25
/** * 设置绘制路径的效果,如点画线等 * 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;    }






原创粉丝点击