ObjectAnimator
是 Android 屬性動畫框架中的一個重要組件,它允許你針對特定屬性的值進行動畫處理。與 ValueAnimator
相比,ObjectAnimator
更專注于 UI 組件,可以直接作用于視圖的屬性,如位置、尺寸、透明度等,而無需手動更新這些屬性。下面是 ObjectAnimator
的基本使用和一些高級技巧。
基本使用
-
創建 ObjectAnimator
?創建
JavaObjectAnimator
最簡單的方法是使用靜態工廠方法ofFloat()
,ofInt()
,ofArgb()
等,但更常用的是通過指定目標對象和要動畫化的屬性名稱來創建。1ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f);
或者使用
JavaObjectAnimator
的構造函數:1ObjectAnimator animator = new ObjectAnimator(); 2animator.setTarget(view); 3animator.setPropertyName("alpha"); 4animator.setFloatValues(0f, 1f);
-
設置動畫時長
?使用
JavasetDuration(long duration)
方法設置動畫持續時間。1animator.setDuration(1000);
-
啟動動畫
?調用
Javastart()
方法開始動畫。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 視圖的屬性動畫。通過上述技巧,你可以實現復雜且流暢的動畫效果。