2011-09-01 21 views
37

我有一個ImageView,我用它來顯示進度通過AnimationDrawable。當我想表明我的進步微調,我這樣做:動畫結束時我該如何處理?

animDrawable.start(); 
ObjectAnimator.ofFloat(view, "alpha", 1.0f).setDuration(300).start(); 

當我想隱藏的微調,我這樣做:

ObjectAnimator.ofFloat(view, "alpha", 0.0f).setDuration(300).start(); 
animDrawable.stop(); 

然而,這具有動畫立即停止影響。我希望在ObjectAnimator完全淡化爲0.0 alpha後停止。有沒有一種方法可以沿着「AnimationCompleted」回調線設置一些東西?

+0

睡不着覺線程的時間,然後調用.stop()? – Rob

+0

我寧願不睡覺UI線程。我可以做一個postDelayed()Runnable,但是這看起來很詭異。我懷疑有一個正確的方法來做到這一點。此外,我不確定整個持續時間有多準確。 –

+0

您可以讓runnable以令人滿意的時間間隔檢查alpha。 –

回答

30

這樣做的更現代的方式是使用ViewPropertyAnimator

view.animate() 
    .alpha(0f) 
    .withEndAction(new Runnable() { 
     @Override 
     public void run() { 
     // Do something. 
     } 
    }) 
    .start(); 

或者,如果你使用RetroLambda:

view.animate() 
    .alpha(0f) 
    .withEndAction(() -> { 
     // Do something. 
    }) 
    .start(); 
+0

確實有幫助,謝謝! – Alex

3

要你對ObjectAnimator原來的問題對象,你可以設置一個Animator.AnimatorListener對象,它定義了幾個動畫狀態回調。要覆蓋公共無效onAnimationEnd(動畫動畫)

animation.addListener(new Animator.AnimatorListener() { 
       @Override 
       public void onAnimationStart(Animator animation) { 

       } 

       @Override 
       public void onAnimationEnd(Animator animation) { 
        Toast.makeText(VideoEditorActivity.this, "animation ended", Toast.LENGTH_LONG).show(); 
       } 

       @Override 
       public void onAnimationCancel(Animator animation) { 

       } 

       @Override 
       public void onAnimationRepeat(Animator animation) { 

       } 
      });