Androidanimation闪烁

我一直在讨论这个主题上的许multithreading,我可以在Android 2.2中处理AnimationListeners时发现闪烁,但我无法完全解决我的问题。

我得到的是一个LinearLayout“popup窗口”,用户触摸它可以向下移动大约100个像素,然后再次触摸移动它。 我终于在第一部分没有任何闪烁的情况下工作了(感谢在视图上调用clearAnimation()的build议),但是当做相反的操作时(即将视图移回),闪烁开始。 我不能在onAnimationStart()方法中调用clearAnimation(),因为它不会animation!

当然,如果我使用setFillAfter()而没有任何animation侦听器,那么所有的animation都可以完美地工作,但是视图的触摸区域不会移动(因为视图本身没有“实际”移动)。

任何帮助将不胜感激。

this.popoverTab.setOnClickListener(new OnClickListener() { public void onClick(View v) { popoverTab.setClickable(false); popoverTab.setFocusable(false); if (popoverHidden) { Log.d(TAG, "About to show popover"); // the popover is currently hidden, show it. TranslateAnimation animation = new TranslateAnimation(0, 0, 100, 0); animation.setDuration(700); animation.setFillBefore(true); animation.setAnimationListener(new AnimationListener() { public void onAnimationEnd(Animation animation) { } public void onAnimationRepeat(Animation animation) { } public void onAnimationStart(Animation animation) { footer.layout(footer.getLeft(), (footer.getTop() - 100), footer.getRight(), footer.getBottom()); } }); footer.startAnimation(animation); } else { Log.d(TAG, "About to hide popover"); // the popover is showing, hide it. TranslateAnimation animation = new TranslateAnimation(0, 0, 0, 100); animation.setDuration(700); animation.setFillAfter(true); animation.setAnimationListener(new AnimationListener() { public void onAnimationEnd(Animation animation) { footer.clearAnimation(); footer.layout(footer.getLeft(), (footer.getTop() + 100), footer.getRight(), footer.getBottom()); } public void onAnimationRepeat(Animation animation) { } public void onAnimationStart(Animation animation) { } }); footer.startAnimation(animation); } // invert. popoverHidden = !popoverHidden; popoverTab.setClickable(true); popoverTab.setFocusable(true); } }); 

Solutions Collecting From Web of "Androidanimation闪烁"

我有同样的问题,几天后,我发现解决scheme… thanx:

http://www.mail-archive.com/android-developers@googlegroups.com/msg67535.html

我想出了解决这个问题的办法。 这个线索来自这样一个事实,即当显示视图时,一切正常。 很明显,当animation运行时,显示强制的更新发生在后台,不会引起闪烁。 当我们隐藏视图时,在onAnimationEnd()的后端添加一个简短的animation使闪烁消失。

这是工作代码中的新的onAndimationEnd()

  public void onAnimationEnd(Animation animation) { animation = new TranslateAnimation(0.0f, 0.0f, 0.0f, 0.0f); animation.setDuration(1); mPlayer0Panel.startAnimation(animation); } 
 @Override public void onAnimationEnd(Animation animation) { footer.clearAnimation(); } 

这对我有效。

你不应该在clearAnimation()上使用onAnimationEnd()

尝试这个:

  1. 两个animation上使用setFillBefore(true)setFillAfter(true)
  2. 在开始和结束两个animation时设置正确的布局属性

我searchanimation问题(闪烁和呆滞)的所有stackoverflow职位。 我没有find任何完美的答案。 但我已经find了相同的解决scheme,如下所示,

onStart的animation使用,

 view_you_want_to_animate.setDrawingCacheEnabled(true); 

animation使用的结束,

 view_you_want_to_animate.setDrawingCacheEnabled(false); 

现在我的观点是没有闪烁或呆滞的行为,当我的观点是animation。 这对我来说很有用。

Alrite,我有同样的问题,使我find它,我结束了这个职位。 find了我的问题的解决scheme,想分享我的解决scheme。

我有很多animation运行,但最近开始闪烁,但是当我追踪到在for循环下绘制animation列表后发现闪烁的问题。 (数组列表)

我简单地添加了try catch来避免定位它之后的问题, 一些animation在飞行中被删除,但没有足够的时间来更新线程,所以循环仍然尝试失败,但没有显示,而是闪烁,但试图抓住数组列表绘图解决了我的问题。