如何在animation结束后在Android中删除animation视图?

我正在使用RelativeLayout的左边移动animation的权利。

我尝试在onAnimationEnd()中将可见性设置为“GONE”,但它不起作用。 animation视图仍然停留在那里。

这是我使用的代码:

从右向左创buildanimation:

 TranslateAnimation animate = new TranslateAnimation(0,-rlImages.getWidth()/2,0,0); animate.setDuration(1000); animate.setFillAfter(true); 

将animation设置为布局:

 centre_leftanimate.startAnimation(animate); 

将侦听器添加到animation中:

 animate.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 centre_leftanimate.setVisibility(View.GONE); // I wants to make the visibility of view to gone,but this is not working half_left.setVisibility(View.VISIBLE); } }); 

如何使animation视图的可见性在animation结束后隐藏?

请build议。

Solutions Collecting From Web of "如何在animation结束后在Android中删除animation视图?"

我有同样的问题,除了我实际上删除了animation视图,但animation仍然存在!

简单的解决scheme是实际取消animation,然后你可以隐藏或删除视图。

 animatedView.getAnimation().cancel(); 

或者如果你仍然有你的animation对象:

 animation.cancel(); 

编辑:似乎有一些左上方的解决scheme,所以我补充说:

 animatedView.setAnimation(null); 

我有同样的问题,在我的情况下删除

 android:fillAfter="true" 

在负责移除视图的animation中,这个代码解决了我的问题。 但其他人将有更好的代码。

 viewToHide.startAnimation(animationForHide); viewToHide.setVisibility(View.GONE); 

您可以根据需要设置视图的可见性。 如果在animation开始后立即将其设置为View.INVISIBLE,则animation将可见,并且视图将在animation停止后立即消失。 我认为你的代码的问题可能是你使用GONE而不是INVISIBLE。 第二个问题可能是您在设置侦听器之前启动animation,但是使用我的解决scheme,实际上并不需要任何侦听器。 另外,拿走FillAfter选项。

  TranslateAnimation animate = new TranslateAnimation(0,-rlImages.getWidth()/2,0,0); animate.setDuration(1000); centre_leftanimate.startAnimation(animate); centre_leftanimate.setVisibility(View.INVISIBLE); 

我有同样的问题,我解决这个问题的答案这个问题的Android – 删除视图时,其animation完成 。

编辑:你可以做这样的事情:

 final MenuActivity MN= MenuActivity.this; AFade.setAnimationListener(new Animation.AnimationListener(){ @Override public void onAnimationStart(Animation arg0) { } @Override public void onAnimationRepeat(Animation arg0) { } @Override public void onAnimationEnd(Animation arg0) { LayoutMain.post(new Runnable() { public void run () { // it works without the runOnUiThread, but all UI updates must // be done on the UI thread MN.runOnUiThread(new Runnable() { public void run() { LayoutMain.removeView(NextButton); } }); } }); } }); 

LayoutMain是包含视图的布局。 MN是你的活动。

我知道这是一个古老的问题,但今天我遇到了这个问题,我想表明我是如何解决这个问题的,因为虽然已经发布的答案有帮助,但是他们没有一个完全适合我的情况。

在我的情况下,我创build了一个自定义视图dinamically,应用2animation(alpha和翻译),并删除animation完成后的看法。 这是我做到的:

 //Create fade out animation AlphaAnimation fadeOut = new AlphaAnimation(1f, 0f); fadeOut.setDuration(1000); fadeOut.setFillAfter(true); //Create move up animation TranslateAnimation moveUp = new TranslateAnimation(0, 0, 0, -getHeight() / 6); moveUp.setDuration(1000); moveUp.setFillAfter(true); //Merge both animations into an animation set AnimationSet animations = new AnimationSet(false); animations.addAnimation(fadeOut); animations.addAnimation(moveUp); animations.setDuration(1000); animations.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { //Hide the view after the animation is done to prevent it to show before it is removed from the parent view view.setVisibility(View.GONE); //Create handler on the current thread (UI thread) Handler h = new Handler(); //Run a runnable after 100ms (after that time it is safe to remove the view) h.postDelayed(new Runnable() { @Override public void run() { removeView(view); } }, 100); } @Override public void onAnimationRepeat(Animation animation) { } }); view.startAnimation(animations); 

请注意,这是在一个自定义视图(它扩展了一个FrameLayout)内完成的,所有的东西都在UI线程上运行。