Andoird graphics-PathEffect

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会将两个效果单独绘制,然后叠加在一起。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值