2010-09-01 150 views
1

假設我有一個Android應用程序,並且在該應用程序中,我想要以「L」形狀對球的圖形進行動畫處理。這需要我定義一個Tween Animation,在其中創建一個動畫xml文件(在下面寫),並將其應用於其中具有球形圖形的View。如何在Android中動態調整Tween動畫的持續時間/速度

<translate> 
Ydelta = 20; 
offset = 0; 
duration = 100; 
</translate> 

<translate> 
Xdelta = 20; 
offset = 100; 
duration = 100; 
</translate> 

現在讓我們說,我想,這樣隨着時間的推移,將L動畫進入更快的速度越來越快,控制這個動畫動態的速度。我如何動態控制整個動畫的速度?我已經嘗試myAnimation.setDuration($ var),但這似乎只適用於動畫的第一部分。偏移大於0的動畫的任何部分都沒有通過setDuration()方法調整其持續時間。

有誰知道我可以統一縮放多setp動畫的方法嗎?

由於

PS - 我知道有圍繞解決此如建立一個2部分動畫和獨立地縮放每個部分或使用碼生成動畫的方法,但如果有更簡單的解決方案,那麼這將是優選。

回答

8

我已經解決了這個問題。要縮放整個動畫,您需要以編程方式創建動畫,並且當您使用setDuration();設置動畫持續時間時,您將它傳遞給變量,而不是使用xml進行硬編碼。

現在,每次我打電話給我的動畫時,我都會將它傳遞給動畫持續時間mAnimDuration,然後立即創建新的時間縮放動畫。您會注意到動畫第二部分的偏移被設置爲動畫第一部分的持續時間。

這裏是從我的代碼示例:

 
AnimationSet rootSet = new AnimationSet(true); 

TranslateAnimation transX = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2, 0,0,0,0); 
transX.setStartOffset(0); 
transX.setDuration(mAnimDuration/2); 
rootSet.addAnimation(transX); 

TranslateAnimation transX2 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2, 0,0,0,0); 
transX2.setStartOffset(mAnimDuration/2); 
transX2.setDuration(mAnimDuration/2); 
rootSet.addAnimation(transX2);