支付宝支付成功动画(Path)

1.效果展示

  

 2.实现步骤

  

public PathMeasureView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        //1.关闭硬件加速(否则有问题)
        setLayerType(LAYER_TYPE_SOFTWARE, null);
        paint = new Paint();
        paint.setStrokeWidth(5);
        paint.setStyle(Paint.Style.STROKE);
        paint.setAntiAlias(true);
        paint.setColor(Color.BLACK);
        origPath = new Path();
        //2.添加圆形(原点选择成0,0. onDraw() 我会移动canvas,将坐标中点移动到屏幕中点)
        origPath.addCircle(0, 0, 300, Path.Direction.CW);
        //3.画对号
        origPath.moveTo(-150, 0);
        origPath.lineTo(0, 150);
        origPath.lineTo(150, -200);
        //4.创建PathMeasure
        pathMeasure = new PathMeasure(origPath, false);
        dst = new Path();
        //5设置属性动画 (0~1)圆形path动画  1 切换到第二条path  (1~2) 对号path动画
        ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 2)
                .setDuration(10000);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                animatorValues1 = (float) animation.getAnimatedValue();
                postInvalidate();
            }
        });
        valueAnimator.start();
    }

 PathMeasure 了解可以移步 这篇

@Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        this.mWidth = w;
        this.mHeight = h;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //移动画布
        canvas.translate(mWidth / 2, mHeight / 2);
        //距离起点的距离
        float stopD = 0;
        if (animatorValues1 < 1) {
            stopD = pathMeasure.getLength() * animatorValues1;
            boolean segment = pathMeasure.getSegment(0, stopD, dst, true);
        } else if (animatorValues1 == 1) {
            pathMeasure.getSegment(0, pathMeasure.getLength(), dst, true);
            //切换到下一个path
            pathMeasure.nextContour();
        } else {
            stopD = pathMeasure.getLength() * Math.abs(1 - animatorValues1);
            boolean segment = pathMeasure.getSegment(0, stopD, dst, true);
        }
        canvas.drawPath(dst, paint);
    }

                

    

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值