参考: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); } }
还有另一个经常用到的就是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。写错了就没有用。
属性动画主要的话就记录这些,都算是比较高级的用法。。。