2011-09-30 153 views
74

我在一個視圖(這是一個片段內)中有一個淡出動畫,並且每次動畫發生時,視圖完成後視圖會重新繪製自己。我發現了一項圍繞view.SetVisibility(View.GONE)的工作。但它不會等待動畫完成。我只想在動畫完成後才執行這個setVisibility代碼。什麼是最好的方式來做到這一點?結束動畫事件android

+0

發表你的代碼是如何展示動畫.... –

回答

139

您可以動畫監聽器添加到您的動畫對象像

anim.setAnimationListener(new Animation.AnimationListener(){ 
    @Override 
    public void onAnimationStart(Animation arg0) { 
    }   
    @Override 
    public void onAnimationRepeat(Animation arg0) { 
    }   
    @Override 
    public void onAnimationEnd(Animation arg0) { 
    } 
}); 
+4

如果要防止淡出動畫在動畫進行過程中再次啓動,請使用if(!anim.hasStarted()|| anim.hasEnded())'檢測動畫是否仍然存在運行。 – theczechsensation

8

只需把你的動畫對象,並添加動畫監聽到它。 下面是示例代碼:

rotateAnimation.setAnimationListener(new AnimationListener() { 

      @Override 
      public void onAnimationStart(Animation animation) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onAnimationRepeat(Animation animation) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onAnimationEnd(Animation animation) { 
       // TODO Auto-generated method stub 

**// WRITE HERE WHATEVER YOU WANT ON THE COMPLETION OF THE ANIMATION** 


      } 
     }); 
15

功能也可以接受的答案,但在一個更簡潔的方式:

      /* Add/Remove any animation parameter */ 
theView.animate().alpha(0).setDuration(2000).withEndAction(new Runnable() { 
    @Override 
     public void run() { 
      theView.setVisibility(View.GONE); 
     } 
    }); 

享受:)

+1

清晰且單線。最佳答案!可以簡單地使用lambda'.withEndAction(() - > theView.setVisibility(View.GONE));' – theBugger

+0

只有這種方式自定義動畫...謝謝bro –

+2

請記住,這是API級別16( 4.1)及以上。 – Tommie