## Android属性动画
### 动画特性
- 动画时长:默认为300毫秒。
- 时间插值:可以根据动画的当前已播放时间来计算属性值。Interpolator类
- 重复次数跟行为:可以为动画设置监听器,设置动画在不同阶段做出不同反映,也可以直接为其设置重复次数,跟重复播放动画的类型如反向播放。
- Animator集:将几个动画,按照一定的播放顺序捆绑在一块。--AnimatorSet类
- 帧刷新延迟:可以指定动画帧的刷新频率。默认为10毫秒(实际刷新速度取决于整个系统的繁忙程度以及底层计数器提供服务的速度)
### 属性动画原理
每隔指定的帧刷新时间就,将TypeEvaluator或者TimeInterpolator计算的返回值设置为指定View的属性值。
### 关键的类
- ValueAnimator:该对象跟踪动画的时间,动画的已运行时长以及正在添加动画效果的属性当前值。ValueAnimator主要利用TimeInterpolator类(控制动画的插值)以及TypeEvaluator类(如何计算正在添加的动画效果属性值)ValueAnimator将基于动画总时长与已播放时间计算已完成动画分数(在0~1之间)。TimeInterpolator会根据该动画完成度来计算新的分数,这是由Interpolator的类型决定的(比如先加速后减速类型的插值器)。然后调用TypeEvaluator根据起始值,结束值,当前动画完成度,来计算当前View的属性值。
- ObjectAnimator:继承自ValueAnimator,一般使用它来简化属性动画的创建过程。但是要求目标对象具有特定的访问器方法。
- TypeEvaluator 此接口可以用于创建自己的评估程序,当你的对象属性值不是int,float,颜色的时候。
- TimeIntterpolator:当Androidsdk提供的插值器不能满足需求时,实现该接口来自定义自己的插值器。
### 属性动画与视图动画区别
- 视图动画系统只能为View对象添加动画效果的功能,视图动画仅能对对象的部分属性添加动画效果。
- 视图动画不能修改View的属性只能绘制新的View。
- 视图动画实现简单
### 注意事项
- 在使用ValueAnimator的时候要手动添加updateListener来改变view的属性。
- ObjectAnimator不用手动添加监听器,但是要添加动画效果的对象属性必须有驼峰式的setter函数(比如自定义view有个属性昵称为color,你必须为其添加 setColor(接受值类型) 方法)。
- 当使用ObjectAnimator的工厂方法如ofFloat()时,如果只传入一个float则默认它为结束值。初始值会通过标准的getter方法(如上)获取。
- 修改View的属性以后要及时的调用invalidate()方法来重新绘制view。