android 属性动画的一些记录

参考:http://blog.csdn.net/guolin_blog/article/details/43816093

属性动画在实现一些比较好看的效果的时候总是能派上用场,所以比较深入的理解是有必要的。

属性动画的本质其实就是不断的通过改变属性值,然后重绘来达到动画的效果,所以它的适用范围很广,不单单只对view有效。


这里有一个需要注意的地方:TypeEvaluator的使用,这是ValueAnimator的比较高级的用法。上面已经说了属性动画的本质就是不断的改变属性值,但是不是所哟的属性值都是int型或者float型,可能是一个Point或者自定义类型,这时候就需要我们自己去决定这些值怎么不断的改变,需要重写TypeEvaluator。下面以FloatEvaluator说明:

public class FloatEvaluator implements TypeEvaluator {
    public Object evaluate(float fraction, Object startValue, Object endValue) {
        float startFloat = ((Number) startValue).floatValue();
        return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);
    }
}

第一个参数是完成度,第二三个参数就是起始值和结束值,上面代码的意思就是(结束值-起始值)*完成度+起始值,看了上面的代码就可以自己去实现任意类型的值的改变规律。需要使用 ValueAnimator.ofObject方法。

还有另一个经常用到的就是Interpolator,具体的用法相信大家都知道,里面有加速、匀速等,其实也可以自定义运动规律。实现TimeInterpolator 接口,重写其中的getInterpolation(float input);方法,其中的input是从0到1匀速变化的值,像匀速运动的话就是直接在这个方法中返回input,AccelerateDecelerateInterpolator(先加速后减速的实现)

public float getInterpolation(float input) {
        return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
    }

最后要提醒一句的是:加入你在自定义一个属性,让他能够在ofFloat中使用,比如ObjectAnimator.ofFloat(view,"cx",0f,300f);cx就是我们在view中的一个自定义属性,这个cx在view中get、set方法名称是有要求的,首个字母要大些setCx。写错了就没有用。

属性动画主要的话就记录这些,都算是比较高级的用法。。。


你可能感兴趣的:(android)