Android动画知识回顾--ValueAnimator属性动画

ValueAnimator属性动画学是学了,代码也能写出了,但是让我自己讲一讲就嘿嘿嘿,主要是脑子有点乱,先说下我个人对ValueAnimator的理解。

就ValueAnimator类来说,我们常用的主要有三个方法:


public static ValueAnimator ofInt(int... values)
public static ValueAnimator ofFloat(float... values)
public static ValueAnimator ofObject(TypeEvaluator evaluator, Object... values);

简单使用最主要的还是要和AnimatorUpdateListener搭配着

ValueAnimator animator = ValueAnimator.ofFloat(0f,400f,50f,300f);
animator.setDuration(3000);
 
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        Float curValueFloat = (Float)animation.getAnimatedValue();
        int curValue = curValueFloat.intValue();
        tv.layout(curValue,curValue,curValue+tv.getWidth(),curValue+tv.getHeight());
    }
});
animator.start();

设置监听器调用getAnimatedValue()方法获取返回值,对目标View进行动画操作。

但是有些情况就不行了 比如你要操作字符变换,或者系统提供测插值器无法做到你要的效果,这时候就需要我们定制Interpolator(插值器:决定动画的变化模式,线性运动和非线性运动)和Evaluator(估值器:决定变化中某一时刻的具体数值)了。详细细节请看启舰大神的博客。

我要说的是在重写Evaluator的时候,一定要注意这个方法:

public T evaluate(float fraction, T startValue, T endValue);

该方法返回值计算:startValue+ fraction * (endValue - startValue))

如果你需要float 类型还好说,无需再做任何操作,但是如果你需要的是Int类型,则返回值一定有重复的,这就需要你做优化操作,毕竟动画很消耗性能的。目前由于个人能力有限想不到如何evaluate方法内过滤重复数据,我一般都是在AnimatorUpdateListener类中getAnimatedValue()方法中过滤重复数据。如果有人有更好的想法,劳烦分享我一下,在这里先谢过了。

发布了30 篇原创文章 · 获赞 13 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/wjr1949/article/details/105405334