自定义控件动画篇(四)ObjectAnimator的使用

发布于:2024-07-03 ⋅ 阅读:(13) ⋅ 点赞:(0)

ObjectAnimator 是 Android 属性动画框架中的一个重要组件,它允许你针对特定属性的值进行动画处理。与 ValueAnimator 相比,ObjectAnimator 更专注于 UI 组件,可以直接作用于视图的属性,如位置、尺寸、透明度等,而无需手动更新这些属性。下面是 ObjectAnimator 的基本使用和一些高级技巧。

基本使用

  1. 创建 ObjectAnimator

     

    创建 ObjectAnimator 最简单的方法是使用静态工厂方法 ofFloat(), ofInt(), ofArgb() 等,但更常用的是通过指定目标对象和要动画化的属性名称来创建。

    Java
    1ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f);

    或者使用 ObjectAnimator 的构造函数:

    Java
    1ObjectAnimator animator = new ObjectAnimator();
    2animator.setTarget(view);
    3animator.setPropertyName("alpha");
    4animator.setFloatValues(0f, 1f);
  2. 设置动画时长

     

    使用 setDuration(long duration) 方法设置动画持续时间。

    Java
    1animator.setDuration(1000);
  3. 启动动画

     

    调用 start() 方法开始动画。

    Java
    1animator.start();

高级使用

动画组合

可以使用 AnimatorSet 来组合多个动画,实现并行或顺序播放。

Java

1AnimatorSet set = new AnimatorSet();
2set.playSequentially(ObjectAnimator.ofFloat(view1, "translationX", 0f, 100f),
3                     ObjectAnimator.ofFloat(view2, "translationY", 0f, 100f));
4set.start();
自定义属性动画

如果需要对自定义属性进行动画处理,可以通过实现 Property 类来自定义属性访问器,并将其传递给 ObjectAnimator

Java

1class MyView extends View {
2    private float myCustomValue;
3
4    public MyView(Context context) {
5        super(context);
6    }
7
8    public static final Property<MyView, Float> MY_CUSTOM_PROPERTY = new Property<MyView, Float>(Float.class, "myCustomProperty") {
9        @Override
10        public Float get(MyView object) {
11            return object.myCustomValue;
12        }
13
14        @Override
15        public void set(MyView object, Float value) {
16            object.myCustomValue = value;
17        }
18    };
19}
20
21// 在动画中使用自定义属性
22ObjectAnimator.ofFloat(myView, MyView.MY_CUSTOM_PROPERTY, 0f, 1f).setDuration(1000).start();
动画监听器

使用 AnimatorListenerAdapter 或直接实现 Animator.AnimatorListener 接口,可以监听动画的开始、结束、取消和重复事件。

Java

1animator.addListener(new Animator.AnimatorListener() {
2    @Override
3    public void onAnimationStart(Animator animation) {}
4
5    @Override
6    public void onAnimationEnd(Animator animation) {}
7
8    @Override
9    public void onAnimationCancel(Animator animation) {}
10
11    @Override
12    public void onAnimationRepeat(Animator animation) {}
13});
动画延迟和循环

使用 setStartDelay(long delay) 可以设置动画开始前的延迟时间,而 setRepeatCount(int count)setRepeatMode(int mode) 可以设置动画的重复次数和模式。

Java
1animator.setRepeatCount(ValueAnimator.INFINITE); // 无限循环
2animator.setRepeatMode(ValueAnimator.REVERSE); // 每次循环后反向播放

ObjectAnimator 提供了一个简洁的接口来创建和控制动画,特别适用于 UI 视图的属性动画。通过上述技巧,你可以实现复杂且流畅的动画效果。