2013-07-05 30 views
3

我製作了三個ObjectAnimator的AnimatorSet,我希望重複序列化。Loop AnimatorSet

<?xml version="1.0" encoding="utf-8"?> 
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:ordering="sequentially"> 

    <objectAnimator 
     android:propertyName="rotation" 
     android:duration="300" 
     android:valueFrom="0" 
     android:valueTo="5" 
     android:valueType="floatType"/> 

    <objectAnimator 
     android:propertyName="rotation" 
     android:duration="600" 
     android:valueFrom="5" 
     android:valueTo="-5" 
     android:valueType="floatType"/> 

    <objectAnimator 
     android:propertyName="rotation" 
     android:duration="300" 
     android:valueFrom="-5" 
     android:valueTo="0" 
     android:valueType="floatType"/> 

</set> 

但如果我設置CycleInterpolator到AnimatorSet因爲動畫師將開始sequentally

公共無效setInterpolator(TimeInterpolator插值) 在API級別11

設置TimeInterpolator目前所有此AnimatorSet的兒童動畫。

所以我試着通過設置一個監聽器來重新啓動AnimatorSet來循環,但是它停止了幾毫秒,並且重新啓動AnimatorSet的效果是顯而易見的。

a.addListener(new AnimatorListenerAdapter() { 
    @Override 
    public void onAnimationEnd(Animator animation) 
    { 
     animation.start(); 
    } 
}); 

我可以做什麼循環它(除非建立一個龐大的ObjectAnimators的列表或寫我自己的動畫使用線程和處理程序)?

回答

4

用於這種特殊情況下的解決方法是創建與第一項目AnimatorSet旋轉一半,第二保持旋轉

<?xml version="1.0" encoding="utf-8"?> 
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:ordering="sequentially"> 

    <objectAnimator 
     android:propertyName="rotation" 
     android:duration="150" 
     android:valueFrom="0" 
     android:valueTo="-5" 
     android:valueType="floatType"/> 

    <objectAnimator 
     android:propertyName="rotation" 
     android:duration="300" 
     android:valueFrom="-5" 
     android:valueTo="5" 
     android:repeatMode="reverse" 
     android:repeatCount="infinite" 
     android:valueType="floatType"/> 

</set> 
-1

只是要求它重複:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:ordering="sequentially" 
    android:repeatMode="reverse" 
    android:repeatCount="infinite"> 

=)

數也可以是一個定義的數字。

+1

您指的是動畫。動畫師對象沒有這樣的方法。 –

+0

yes確實如此:http://developer.android.com/reference/android/animation/ValueAnimator.html#INFINITE – Budius

+1

ValueAnimator有,但我使用了AnimatorSet(它擴展了Animator,而不是ValueAnimator)。 –

-1
+1

你指的是動畫。動畫師對象沒有這樣的方法。 –

+0

你說得對,我沒有注意到。因此,您可以通過編程方式創建AnimatorSet,其中包含多次與XML定義的AnimatorSet相同的實例,或者由於pskink建議創建自定義循環插補器。我會用模而不是正弦 – ognian

+0

我試過,但它適用於所有孩子的插值器。而帶插值器+充氣AnimatorSet的新AnimatorSet不會重複。 –

4

也在這個特性的急需之下,原來有些已經找到了解決方案。

http://www.jefflinwood.com/2013/04/repeating-android-animations-with-animatorset/

所有榮譽屬於原作者。

+0

我記得我試過了。每當它重新啓動時,它都會產生一個小而明顯的延遲。 –

+1

@DoctororDrive使用這種方法(在Kindle Fire HDX上淡入,淡出,然後再次循環)剛剛完成我的項目之一,我的部分沒有觀察到任何延遲。 –

+3

很難相信animationset不能循環! –