Paint中PathDashPathEffect的简单使用

今天来了解一下PathDashPathEffect的简单使用,PathDashPathEffect与DashPathEffect的功能很像,不一样的就是它中间的实线部分,可以是我自定义的图形。看一下,方法

public PathDashPathEffect(Path shape, float advance, float phase,
                              Style style) {
        native_instance = nativeCreate(shape.ni(), advance, phase,
                                       style.native_style);
    }

官方的解释是:
shape是填充的图形,这个图形可以自己绘制,
advance是图形之间的间距,
phase是path的偏移量,
其中有3种style,TRANSLATE是指图形以平移的方式填充path,ROTATE会根据path的旋转而旋转,MORPH和ROTATE差不多,不过有一点就是MORPH会在转角的连接处以平滑的方式连接
(这里说明一下,MORPH,这个我试了一下,使用这个style,显示不出来,不知道为什么,如果有知道,请告诉我一下)
好了,话不多说,直接上代码,就一切都明白了

public class PathDashView extends View {

    private Paint mPaint;
    private Path mPath1;
    private Path mPath2;

    private Path mPath;
    private Paint mPaint1;
    private Paint mPaint2;

    private Path pPath;
    private Path pPath2;

    private PathEffect mPathEffect;
    private PathEffect mPathEffect1;
    private PathEffect mPathEffect2;

    public PathDashView(Context context) {
        this(context,null);
    }

    public PathDashView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public PathDashView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeWidth(5);
        mPaint.setColor(Color.RED);

        mPaint1 = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint1.setStyle(Paint.Style.STROKE);
        mPaint1.setStrokeWidth(5);
        mPaint1.setColor(Color.RED);

        mPaint2 = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint2.setStyle(Paint.Style.STROKE);
        mPaint2.setStrokeWidth(5);
        mPaint2.setColor(Color.RED);

        mPath = new Path();
        mPath.moveTo(0,300);
        mPath.lineTo(200,300);
        mPath.lineTo(400,100);
        mPath.lineTo(600,400);

        mPath1 = new Path();
        mPath1.moveTo(0,350);
        mPath1.lineTo(200,350);
        mPath1.lineTo(400,150);
        mPath1.lineTo(600,450);

        mPath2 = new Path();
        mPath2.moveTo(0,400);
        mPath2.lineTo(200,400);
        mPath2.lineTo(400,200);
        mPath2.lineTo(600,500);

        //第一种间隔,小圆点
        pPath = new Path();
        pPath.addCircle(0,0,5,Path.Direction.CW);

        //第二种间隔,小三角
        pPath2 = new Path();
        pPath2.moveTo(5,0);
        pPath2.lineTo(0,5);
        pPath2.lineTo(10,5);
        pPath2.lineTo(5,0);

        mPathEffect = new PathDashPathEffect(pPath,20,0,PathDashPathEffect.Style.ROTATE);
        mPathEffect1 = new PathDashPathEffect(pPath,20,0,PathDashPathEffect.Style.TRANSLATE);
        mPathEffect2 = new PathDashPathEffect(pPath2,20,6,PathDashPathEffect.Style.ROTATE);

        mPaint.setPathEffect(mPathEffect);
        mPaint1.setPathEffect(mPathEffect1);
        mPaint2.setPathEffect(mPathEffect2);

    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.drawPath(mPath,mPaint);
        canvas.drawPath(mPath1,mPaint1);
        canvas.drawPath(mPath2,mPaint2);
    }
}
发布了305 篇原创文章 · 获赞 261 · 访问量 184万+

猜你喜欢

转载自blog.csdn.net/chenguang79/article/details/102543248