如果ObjectAnimator如果將屬性x
指定爲字符串,它將如何調用相應的方法setX
。我的意思是,用什麼技術來識別我想動畫我視圖的屬性「旋轉」並調用該視圖的適當方法setRotation?Android ObjectAnimator如何工作?
我已經理解了ObjectAnimator如何工作並設法使用它,這很簡單,我只是對操作原理感到好奇。
對不起,我的英語,我從來沒有使用它:)
如果ObjectAnimator如果將屬性x
指定爲字符串,它將如何調用相應的方法setX
。我的意思是,用什麼技術來識別我想動畫我視圖的屬性「旋轉」並調用該視圖的適當方法setRotation?Android ObjectAnimator如何工作?
我已經理解了ObjectAnimator如何工作並設法使用它,這很簡單,我只是對操作原理感到好奇。
對不起,我的英語,我從來沒有使用它:)
有多種方式以動畫視圖的旋轉:
ObjectAnimator.ofFloat(view, "rotation", 0f, 90f).start();
這使用reflection到請致電setRotation(float f)
和float getRotation()
視圖的方法。
只要該類爲該屬性實現了適當的getter和setter方法,就可以使用此方法爲類的任何屬性設置動畫。
但反射是一個緩慢的操作,所以有第二種方法不使用反射。
2.ObjectAnimator.ofFloat(view, View.ROTATION, 0f, 90f).start();
這使用旋轉屬性的視圖。 Property是一個抽象類,它定義了setValue(T)
和T get()
方法,該方法又調用提供對象的實際獲取器和設置器。例如,在View
類旋轉屬性使用下面的代碼:
public static final Property<View, Float> ROTATION = new FloatProperty<View>("rotation") {
@Override
public void setValue(View object, float value) {
object.setRotation(value);
}
@Override
public Float get(View object) {
return object.getRotation();
}
};
如果要動畫對象的自定義屬性,你可以實現自己的財產像上面的。
然後有第三種方法,它也不使用反射。
view.animate().rotation(90f);
這其中有一個流暢的接口,所以它更容易使用。例如:您可以將多個動畫鏈接在一起運行,例如:view.animate().rotation(90f).translationX(10f);
此方法的缺點是隻能對視圖的標準屬性進行動畫製作,而不能在您自己的類上設置自定義屬性或屬性。
呃,使用反射來生成動畫Object聲音太糟糕了,應該不可能! – Blablablabli 2017-02-22 09:24:14
對於屬性「foo」,setFoo方法通過reflaction調用 – pskink 2015-02-07 10:32:33