ValueAnimator
是 Android 属性动画系统的一部分,允许你创建基于值的动画而不仅仅是基于 UI 控件的动画。它可以用来改变任何类型的数据,如整数、浮点数、颜色值等,然后你可以利用这些变化的值来更新你的 UI 或执行其他逻辑。以下是 ValueAnimator
的基本使用和一些高级技巧。
基本使用
创建 ValueAnimator
-
初始化 ValueAnimator: 使用静态工厂方法
JavaofInt
,ofFloat
,ofArgb
, 或者ofObject
来创建一个ValueAnimator
实例。1ValueAnimator animator = ValueAnimator.ofInt(0, 100);
-
设置动画时长: 使用
JavasetDuration(long duration)
方法设置动画持续时间。1animator.setDuration(1000);
-
添加更新监听器: 使用
JavaaddUpdateListener
添加一个AnimatorUpdateListener
来监听动画的更新事件。1animator.addUpdateListener(new AnimatorUpdateListener() { 2 @Override 3 public void onAnimationUpdate(ValueAnimator animation) { 4 int animatedValue = (Integer) animation.getAnimatedValue(); 5 // 更新UI或其他逻辑 6 } 7});
-
启动动画: 调用
Javastart()
方法开始动画。1animator.start();
高级使用
插值器与 Evaluator
- 插值器 (
Interpolator
) 定义动画的加速度和减速效果。 - Evaluator 负责在动画过程中计算从起始值到结束值的中间值。
自定义 Evaluator
如果你需要处理非基本类型(如自定义对象)的动画,可以使用 ofObject
并提供一个自定义的 TypeEvaluator
。
Java
1ValueAnimator objectAnimator = ValueAnimator.ofObject(new TypeEvaluator<MyObject>() {
2 @Override
3 public MyObject evaluate(float fraction, MyObject startValue, MyObject endValue) {
4 // 自定义计算逻辑
5 return new MyObject(...);
6 }
7}, startObject, endObject);
复杂动画
可以组合多个 ValueAnimator
来创建复杂的动画序列或者并行动画。
动画链式调用
可以使用 addListener
, setStartDelay
, setRepeatCount
, setRepeatMode
等方法来进一步定制动画行为。
动画组 (AnimatorSet)
可以使用 AnimatorSet
来控制一组动画的同步或异步执行。
Java
1AnimatorSet set = new AnimatorSet();
2set.playSequentially(animator1, animator2);
3set.start();
示例代码
下面是一个简单的 ValueAnimator
使用示例,用于改变一个 View 的背景颜色:
Java
1ValueAnimator colorAnim = ValueAnimator.ofArgb(0xFF0000FF, 0xFFFF0000);
2colorAnim.setDuration(1000);
3colorAnim.addUpdateListener(new AnimatorUpdateListener() {
4 @Override
5 public void onAnimationUpdate(ValueAnimator animation) {
6 int color = (int) animation.getAnimatedValue();
7 view.setBackgroundColor(color);
8 }
9});
10colorAnim.start();
ValueAnimator
提供了强大的动画控制能力,适合于需要精细控制动画值变化的场景。