比方說,我有一個自定義對象,就像一個Point類(我沒有使用Android中的一個),我需要慢慢地將其座標從開始值更改爲結束值,當用戶加倍點擊屏幕。我已經完成所有設置,但是我無法使這種更改生效。你知道我能做到嗎?Animate自定義對象變量
我已經嘗試過這樣的事情,但沒有得到改變: ObjectAnimator(點, 「point.variable」,final_value)。開始()
比方說,我有一個自定義對象,就像一個Point類(我沒有使用Android中的一個),我需要慢慢地將其座標從開始值更改爲結束值,當用戶加倍點擊屏幕。我已經完成所有設置,但是我無法使這種更改生效。你知道我能做到嗎?Animate自定義對象變量
我已經嘗試過這樣的事情,但沒有得到改變: ObjectAnimator(點, 「point.variable」,final_value)。開始()
您可能已經設置了ObjectAnimator
不正確。
我們假設你的Point
類有一個實例變量xPosition
,它是一個整數。爲了與ObjectAnimator
動畫的xPosition
,你可以這樣做:
ObjectAnimator.ofInt(new Point(), // Instance of your class
"xPosition", // Name of the property you want to animate
startValue, // The initial value of the property
... intermediateValues ..., // Any other desired values
endValue) // The final value of the property
.setDuration(duration) // Make sure to set a duration for the Animator
.start(); // Make sure to start the animation.
的ObjectAnimator
將嘗試每幀後自動更新屬性,但爲了它是成功的,你的類必須有一個正確的設置方法爲setYourProperty
格式的財產。所以在這個特殊的例子中,你的班級必須有一個名爲setXPosition
的方法(注意駱駝的情況)。
如果由於某種原因,這是行不通的,那麼你回落ValueAnimator
。你以類似的方式設置ValueAnimator
。
ValueAnimator anim = ValueAnimator.ofInt(startValue // Initial value of the property
endValue) // Final value of the property
.setDuration(duration); // Make sure to set a duration for the Animation.
這裏的區別在於您必須手動更新您的屬性。爲此,我們將AnimatorUpdateListener
添加到在動畫中的每幀之後將調用其onAnimationUpdate
方法的動畫。
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
// Manually call the xPosition's setter method.
point.setXPosition(animation.getAnimatedValue());
}
});
並且不要忘記開始動畫。
anim.start();
有關ValueAnimator
和ObjectAnimator
更多詳細信息,請參閱谷歌的API指南屬性動畫: http://developer.android.com/guide/topics/graphics/prop-animation.html#value-animator
好吧,我得到它的工作。謝謝!還有一個問題:如果我正在處理本地變量,我是否有義務使用ValueAnimator?或者我可以使用某種屬性來避免實現UpdateListener? –
如果您使用的是ValueAnimator,幾乎需要使用UpdateListener,否則您將無法將動畫製作者正在生成的值與變量實際關聯起來。對於大多數情況,只要您提供適當的setter方法,ObjectAnimator就可以正常工作。我不完全確定本地變量的含義,但是在本地聲明的變量不能在ValueAnimator中使用,因爲如果聲明爲final,則只能從UpdateListener內部引用局部變量,這會阻止您實際上改變了價值。 –
本地變量我的意思是那些沒有被用戶定義的,換句話說就是int,double,float等等。因爲它們不是對象,我不知道在ObjectAnimator中設置什麼參數。那麼我需要爲他們使用ValueAnimator嗎? –