2013-10-08 112 views
1

當我開始按鈕點擊,然後結束按鈕,再點擊開始按鈕導致以下情況除外:AnimatorSet:循環依賴不能存在

10-08 08:57:57.963: E/AndroidRuntime(2009): java.lang.IllegalStateException: Circular dependencies cannot exist in AnimatorSet 
10-08 08:57:57.963: E/AndroidRuntime(2009):  at android.animation.AnimatorSet.sortNodes(AnimatorSet.java:848) 
10-08 08:57:57.963: E/AndroidRuntime(2009):  at android.animation.AnimatorSet.start(AnimatorSet.java:486) 
10-08 08:57:57.963: E/AndroidRuntime(2009):  at com.example.propertyanimation.IndividualPropertyAnimationActivity$1.onClick(IndividualPropertyAnimationActivity.java:51) 
10-08 08:57:57.963: E/AndroidRuntime(2009):  at android.view.View.performClick(View.java:4240) 

的源代碼:

pvhX = PropertyValuesHolder.ofFloat(View.SCALE_X, 2); 
    pvhY = PropertyValuesHolder.ofFloat(View.SCALE_Y, 2); 
    scaleAnimation = ObjectAnimator.ofPropertyValuesHolder(mSubject, pvhX, pvhY); 
    scaleAnimation.setRepeatCount(0); 
    scaleAnimation.setRepeatMode(ValueAnimator.REVERSE); 
    scaleAnimation.setDuration(3000); 

    rotateAnimation = ObjectAnimator.ofFloat(mSubject, View.ROTATION, 360); 
    rotateAnimation.setRepeatCount(ValueAnimator.INFINITE); 
    rotateAnimation.setDuration(2000); 

    mButtonStart.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      setAniation.play(scaleAnimation).before(rotateAnimation); 
      setAniation.start(); 
     } 
    }); 
    mButtonEnd.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      setAniation.end(); 
     } 
    }); 

回答

7

不要重用AnimatorSet,創建一個新的,它會沒事的。建築商在積累值,以此來創建一個循環(取決於自己在「之前」動畫)

0

我的問題,因爲我錯

final AnimatorSet set = new AnimatorSet(); 
    set.setDuration(250); 
    set.setInterpolator(new AnticipateOvershootInterpolator()); 
    set.playTogether(galleryScaleX, galleryScaleY 
      , cameraScaleX, cameraScaleY 
      , audioScaleX, audioScaleY 
      , documentScaleX, documentScaleY 
      , locationScaleX, locationScaleY 
      ,audioScaleX,audioScaleY/* same animation here*/ 
      , contactScaleX, contactScaleY); 
    set.start(); 

重複相同的動畫兩次只要確保你不要重複相同的動畫