2011-09-30 83 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