2015-11-24 52 views
0

我一直在做一個小遊戲,我需要一個進度條動畫,當我第一次觸摸按鈕時開始,如果在動畫之前再次觸摸按鈕結束進度條需要重置。Android:取消()動畫不起作用

在我的代碼animation.start();工作正常,但animation.cancel()似乎不工作。含不工作行

French Version of this Question

我的活動代碼:

public class MainActivity extends Activity { 

    Button b_bleu; 
    PrgressBar bar1; 

    @Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
     b_bleu.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      ObjectAnimator animation = ObjectAnimator.ofInt(bar1, "progress", 100, 0); 
      animation.setDuration(5000); 
      animation.addListener(new Animator.AnimatorListener() { 
       @Override 
       public void onAnimationStart(Animator animator) { 

       } 

       @Override 
       public void onAnimationEnd(Animator animator) { 
        //application se termine 
       } 

       @Override 
       public void onAnimationCancel(Animator animator) { 

       } 

       @Override 
       public void onAnimationRepeat(Animator animator) { 

       } 
      }); 

      animation.cancel(); 
      animation.start(); 
     } 
    }); 
} 
+0

你能否詳細說明「似乎不起作用」?你期望發生什麼?究竟發生了什麼? – alanv

回答

0

我認爲這個問題是animation.cancel()有沒有影響,因爲你後馬上打電話animation.start();

嘗試是這樣的:

聲明一個字段:

private boolean mStarted = false; 

然後將其設置在動畫回調並檢查其值:

animation.addListener(new Animator.AnimatorListener() { 
    @Override 
    public void onAnimationStart(Animator animation) { 
     mHasStarted = true; 
    } 

    @Override 
    public void onAnimationEnd(Animator animation) { 
     mHasStarted = false; // reset the field value so that it can be started again onClick once it has ened 
    } 

    @Override 
    public void onAnimationCancel(Animator animation) { 
     mHasStarted = false; 
    } 
}); 

if (mStarted) { 
    animation.cancel(); 
} else { 
    animation.start(); 
} 

希望這有助於!

+0

謝謝你的回答,但我找到了一個解決方案animation.setAutoCancel(false):)如果有人想要的代碼,問我;) –