Android 如何解决Honeycomp前期的布局动画问题

Android 如何解决Honeycomp前期的布局动画问题,android,animation,layout,Android,Animation,Layout,我读了很多关于Honeycomp之前的动画的文章,这些变化只考虑到了内部绘图。我必须支持2.1以下的版本,所以Animator也不是一个选项 我有一个线性布局,在屏幕右侧有两个按钮。在某些事件中,我将右按钮设置为动画,使其脱离视图。不幸的是,点击事件是在其原始位置注册的。作为一种解决方法,我添加了一个AnimationListener,并在AnimationEnd上将按钮的可见性设置为View.GONE,如果按钮再次设置动画,则将其与View.VISIBLE一起带回来。这会导致布局出现丑陋的闪光

我读了很多关于Honeycomp之前的动画的文章,这些变化只考虑到了内部绘图。我必须支持2.1以下的版本,所以
Animator
也不是一个选项

我有一个线性布局,在屏幕右侧有两个按钮。在某些事件中,我将右按钮设置为动画,使其脱离视图。不幸的是,点击事件是在其原始位置注册的。作为一种解决方法,我添加了一个
AnimationListener
,并在AnimationEnd上将按钮的可见性设置为
View.GONE
,如果按钮再次设置动画,则将其与
View.VISIBLE一起带回来。这会导致布局出现丑陋的闪光,如果我应用可见性,就会设置动画

是否有其他方法在动画之后跟踪视图?我是否可以删除一个视图,而不在包含的布局中产生一个闪存(可能是某种双重缓冲)

编辑: 术语
Flash
表示视图在其位置上消失很短时间,然后再次出现在同一位置上。如果
onAnimation[Start | End]
通过“flash”更改布局中的某些内容,则会发生这种情况,您的意思是视图会跳转到新位置吗?或者,您的意思是,在动画结束之间的过渡期间,有某种东西看起来像是一个bug,它将视图移动一秒钟到其原始位置

在任何情况下,这里有一个在类似场景中对我有用的示例代码。你当然需要改变它。我希望它能帮助您:

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);

看看我的编辑,看看我所说的
flash
是什么意思。我还尝试了您的实现,但似乎
setFillAfter(false)
onAnimationEnd
中没有效果。另外,如果我离开它并相应地更改值,
flash
会再次出现。我不明白。flash bug是否发生在我的实现上(没有任何更改)?我只更改了deltaX,并且我有一个相对论。请尝试在frameLayout上使用它,并告诉我它是否适用于您,因为我没有在其他布局上测试它。他们可能是一样的,但我想确定一下。