android 基础 view 按照path运动的三种方法

view 按照path运动的三种方法


public void path3() {
        ValueAnimator valueAnimator = ValueAnimator.ofObject(new TypeEvaluator<PointF>() {
            @Override
            public PointF evaluate(float fraction, PointF startValue, PointF endValue) {
                PointF pointF = new PointF();
                pointF.set((endValue.x - startValue.x) * fraction, (endValue.y - startValue.y) * fraction);
                return pointF;
            }

        }, new PointF(0, 0), new PointF(500, 500));
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                PointF pointF = (PointF) animation.getAnimatedValue();
                v_one.setX(pointF.x);
                v_one.setY(pointF.y);
            }
        });
        valueAnimator.setDuration(4000);
        valueAnimator.start();
    }

    public void path2() {
        final float[] position = new float[2];
        final Path path = new Path();
        path.moveTo(0, 0);
        path.lineTo(500, 500);
        path.quadTo(200, 500, 0, 1000);
        final PathMeasure pathMeasure = new PathMeasure();
        pathMeasure.setPath(path, false);
        ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, pathMeasure.getLength());
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float lenth = (float) animation.getAnimatedValue();
                pathMeasure.getPosTan(lenth, position, null);
                v_one.setX(position[0]);
                v_one.setY(position[1]);
            }
        });
        valueAnimator.setDuration(2000);
        valueAnimator.start();
    }


    public void path1() {
        Path path = new Path();
        path.moveTo(100, 100);
        path.lineTo(500, 500);
        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(v_one, "x", "y", path);
        objectAnimator.start();
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【Android 动画】 动画分类补间动画(Tween动画)帧动画(Frame 动画)属性动画(Property ...
    Rtia阅读 11,385评论 1 38
  • Animation Animation类是所有动画(scale、alpha、translate、rotate)的基...
    四月一号阅读 5,918评论 0 10
  • 属性动画实际上是一种不断地对值进行操作的机制,并将值赋值到指定对象的指定属性上,可以是任意对象的任意属性。属性动画...
    A_Coder阅读 2,934评论 0 0
  • 1 背景 不能只分析源码呀,分析的同时也要整理归纳基础知识,刚好有人微博私信让全面说说Android的动画,所以今...
    未聞椛洺阅读 7,668评论 0 10
  • 功能强大的属性动画(property animation) 最近在学习有关自定义View的内容,在Github上看...
    食梦兽阅读 12,383评论 0 22

友情链接更多精彩内容