属性动画
属性动画在指定时长内改变一个属性的值 (属性指一个对象的一个变量) 可以定义一个属性动画随着时间变化改变一个对象的属性, 不管这个对象是否画到屏幕上。
可以为属性动画设定如下属性:
1. Duration: 动画的时间, 默认为300ms.
2. Time interpolation:时间插值函数. (指定属性值变化的快慢)
3. Repeat count and behavior:重复次数与行为, 可以指定在动画结束时是否要重复执行动画和重复执行的次数. 也可以指定动画按照原来的方式倒着播放, 如果这样设置, 它会先正着播放, 再倒着播放,如此反复到最大播放次数.
4. Animator sets:动画集合, 可以把一系列动画组成逻辑的集合, 让他们一起播放或者按顺序播放.
5. Frame refresh delay:刷新的频率, 默认为10ms, 最终的刷新频率依赖与系统当前的负载和系统定时器的精度.
1. 属性动画是怎样工作的
ValueAnimator对象记录了动画的时间, 比如动画执行多长时间了和被动画的属性的当前值. ValueAnimator封装了一个TimeInterpolator(它定义了动画的插值函数)和一个TypeEvalutor(它定义了怎样计算被做动画的属性)
为了起动一个动画, 创建一个ValueAnimator并且给出你要做动画的属性的初始值和最终值和动画的时间. 当调用start()时, 动画就开始了. 在整个动画期间, ValueAnimator基于动画的时间和已经流逝的时间来计算流逝分数(介于0和1之间)
流逝的分数代表了动画已完成部分的时间, 0表示完成0%, 1表示完成100%.
当ValueAnimator计算完流逝分数时, 它会调用被设置的TimeInterpolator, 去计算一个插值分数. 插值分数把流逝分数和时间插值映射到一个新的分数. 当插值分数计算完了, ValueAnimator会调用合适的TypeEvalutor, 根据插值分数、起始值和最终值计算正在动画的属性的值.
2. 属性动画和视图动画的不同
1. 视图动画只能给View对象做动画.
视图动画只能给View对象的一些属性做动画, 如缩放和旋转, 但背景色却不能被做动画.
2. 视图动画只是改变了视图被绘制的位置, 而不是View对象本身. 比如可以通过视图动画让按钮穿过屏幕,但是响应点击事件的位置却没有改变.
3. 属性动画能够给任何对象的任何属性做动画, 而且对象本身确实被修改了. 可以指定要做动画的属性, 还可以设置插值函数和各个动画的同步.
4. 视图动画代码比较简单.
3. 属性动画的API
3.1 Animator
3.1.1 ValueAnimator:属性动画的主要时序引擎, 它也计算被动画的属性的值. 它包含了核心的计算动画的值的功能, 也包括每一个动画的信息如是否重复, 更新事件的监听器和设置计算自定义类型的能力. 为属性做动画有两个要点: 计算被动画属性的值和把这些值设置到被动画的对象上.ValueAnimator不实施第二点, 所以使用者必须自己监听由ValueAnimator计算出来的值并且根据你的逻辑来修改你要做动画的对象.
3.1.2 ObjectAnimator:ValueAnimator的子类, 它允许你设置一个目标对象和属性去做动画. 当这个类计算完一个新值的时候, 它就相更新相应的属性. 这个类在使用时有一些限制, 比如在目标对象中必须有相应的更新属性的方法.
3.1.3 AnimatorSet:提供了把动画组合在一起的机制, 使不同的动画可以以某种关系在一起运行. 可以设置动画一起运行或者顺序运行或者在一个给定延迟后运行.
3.2 Evaluator
Evaluator告诉属性动画系统怎样计算给定属性的值. 它使用Animator类提供的时序数据, 动画的起始和终止值
计算被动画的属性的值
IntEvaluator:计算int属性的默认Evaluator
FloatEvaluator:计算float属性的默认Evaluator
ArgbEvaluator:计算颜色属性的默认Evaluator
TypeEvaluator:如果要做动画的属性非上述三个, 或者想改变上述三个属性的默认行为, 可以实现这个接口.
3.3 Interpolator
时间插值器定义了动画中的特定值(做为时间的函数)是怎样计算出来的.
AccelerateDecelerateInterpolator
AccelerateInterpolator
AnticipateInterpolator
AnticipateOvershootInterpolator
BounceInterpolator
CycleInterpolator
DecelerateInterpolator
LinearInterpolator
OvershootInterpolator:
TimeInterpolator:一个可以实现自定义插值器的接口