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 裁剪动画正在播放