上QQ阅读APP看书,第一时间看更新
3.3.1 常规的属性动画
视图View类虽有许多状态属性,但补间动画只对其中6种属性进行操作,具体说明见表3-2。
表3-2 补间动画的属性说明
实际上每个控件的属性远不止这6种,如果要求对视图的背景颜色做渐变处理,补间动画就无能为力了。为此,Android又引入了属性动画ObjectAnimator。属性动画突破了补间动画的局限,允许视图的所有属性都能实现渐变的动画效果,例如背景颜色、文字颜色、文字大小等。只要设定某属性的起始值与终止值、渐变的持续时间,属性动画即可实现渐变效果。
下面是ObjectAnimator的常用方法:
- ofInt:定义整型属性的属性动画。
- ofFloat:定义浮点型属性的属性动画。
- ofArgb:定义颜色属性的属性动画。
- ofObject:定义对象属性的属性动画,用于不是上述三种类型的属性,例如Rect对象。
以上4个of方法的第一个参数为宿主视图对象,第二个参数为需要变化的属性名称,从第三个参数开始以及后面的参数为属性变化的各个状态值。注意,of方法后面的参数个数是变化的。如果第3个参数是状态A、第4个参数是状态B,属性动画就从A状态变为B状态;如果第3个参数是状态A、第4个参数是状态B、第5个参数是状态C,属性动画就先从A状态变为B状态,再从B状态变为C状态。
- setRepeatMode:设置动画的重播模式。ValueAnimator.RESTART表示从头开始,ValueAnimator.REVERSE表示倒过来播放。默认值为ValueAnimator.RESTART。
- setRepeatCount:设置动画的重播次数。默认值为0,表示只播放一次;值为ValueAnimator.INFINITE时表示持续重播。
- setDuration:设置动画的持续播放时间,单位为毫秒。
- setInterpolator:设置动画的插值器。
- setEvaluator:设置动画的估值器。
- start:开始播放动画。
- cancel:取消播放动画。
- end:结束播放动画。
- pause:暂停播放动画。
- resume:恢复播放动画。
- reverse:倒过来播放动画。
- isRunning:判断动画是否在播放。注意,暂停时,isRunning方法仍然返回true。
- isPaused:判断动画是否被暂停。
- isStarted:判断动画是否已经开始。注意,曾经播放与正在播放都算已经开始。
- addListener:添加动画监听器,需实现接口AnimatorListener的4个方法。
- onAnimationStart:在动画开始播放时触发。
- onAnimationEnd:在动画结束播放时触发。
- onAnimationCancel:在动画取消播放时触发。
- onAnimationRepeat:在动画重播时触发。
- removeListener:移除指定的动画监听器。
- removeAllListeners:移除所有动画监听器。
下面是使用属性动画分别实现透明度、平移、缩放、旋转等变换操作的示例代码:
(完整代码见animation\src\main\java\com\example\animation\ObjectAnimActivity.java)
在上述代码演示的属性动画中,补间动画已经实现的效果就不再给出图例了,补间动画未实现的裁剪动画效果如图3-22和图3-23所示。图3-22为裁剪即将开始时的画面,图3-23为裁剪过程中的画面。
图3-22 裁剪动画即将开始
图3-23 裁剪动画正在播放