2015-06-10 84 views
0

比方說,我有一個自定義對象,就像一個Point類(我沒有使用Android中的一個),我需要慢慢地將其座標從開始值更改爲結束值,當用戶加倍點擊屏幕。我已經完成所有設置,但是我無法使這種更改生效。你知道我能做到嗎?Animate自定義對象變量

我已經嘗試過這樣的事情,但沒有得到改變: ObjectAnimator(點, 「point.variable」,final_value)。開始()

回答

1

您可能已經設置了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(); 

有關ValueAnimatorObjectAnimator更多詳細信息,請參閱谷歌的API指南屬性動畫: http://developer.android.com/guide/topics/graphics/prop-animation.html#value-animator

+0

好吧,我得到它的工作。謝謝!還有一個問題:如果我正在處理本地變量,我是否有義務使用ValueAnimator?或者我可以使用某種屬性來避免實現UpdateListener? –

+0

如果您使用的是ValueAnimator,幾乎需要使用UpdateListener,否則您將無法將動畫製作者正在生成的值與變量實際關聯起來。對於大多數情況,只要您提供適當的setter方法,ObjectAnimator就可以正常工作。我不完全確定本地變量的含義,但是在本地聲明的變量不能在ValueAnimator中使用,因爲如果聲明爲final,則只能從UpdateListener內部引用局部變量,這會阻止您實際上改變了價值。 –

+0

本地變量我的意思是那些沒有被用戶定義的,換句話說就是int,double,float等等。因爲它們不是對象,我不知道在ObjectAnimator中設置什麼參數。那麼我需要爲他們使用ValueAnimator嗎? –