如何解决蜂窝前的布局动画

时间:2012-07-16 13:07:09

标签: android animation layout

我阅读了很多关于动画预装Honeycomp的内容,而这些更改只考虑了内部绘图。我必须支持低至2.1的版本,因此Animator也不是选项。

我有一个LinearLayout,包含两个按钮,位于屏幕的右侧。在某些事件中,我将右按钮设置为视图外的动画。不幸的是,Click-ecents在其原始位置注册。作为解决方法,我添加了一个AnimationListener,并在AnimationEnd上将Buttons可见性设置为View.GONE,如果Button再次设置为动画,则将其带回View.VISIBLE。这会导致布局的丑陋闪现,如果我应用可见性,则会生成动画。

动画后是否还有其他方法可以跟踪视图?我可以删除一个视图,而不会在包含的布局中产生一个闪光(可能是某种doubleBuffering)吗?

修改 术语Flash意味着视图在很短的时间内消失了它的位置,并在同一位置上再次出现。如果onAnimation[Start|End]更改了布局

内的某些内容,则会发生这种情况

1 个答案:

答案 0 :(得分:1)

通过“flash”,你的意思是视图跳转到他们的新位置?或者你的意思是在动画结束之间的过渡期间,有一些东西看起来像一个错误,将视图移动一秒钟到原来的位置?

无论如何,这是一个在类似场景下对我有用的示例代码。你当然需要改变它。我希望它可以帮助你:

final int deltaXToMove=50;
TranslateAnimation translateAnimation=new TranslateAnimation(0,deltaXToMove,0,0);
int animationTime=1000;
translateAnimation.setDuration(animationTime);
translateAnimation.setFillEnabled(true);
translateAnimation.setFillAfter(true);
final Button b=(Button)findViewById(R.id.button);
translateAnimation.setAnimationListener(new AnimationListener()
  {
  @Override
  public void onAnimationEnd(Animation animation)
    {
    animation.setFillAfter(false);
    FrameLayout.LayoutParams par=(LayoutParams)b.getLayoutParams();
    par.leftMargin=deltaXToMove;
    b.setLayoutParams(par);
    }
...
b.startAnimation(translateAnimation);