0

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

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

动画后是否有另一种方法来跟踪视图?我可以删除一个视图,而不导致包含布局内的闪存(可能是某种双缓冲)吗?

编辑: 该术语Flash意味着视图在其位置上消散了很短的时间,然后再次出现在同一位置上。如果onAnimation[Start|End]更改该布局内的某些内容,就会发生这种情况

4

1 回答 1

1

“flash”是指视图跳转到新位置吗?或者你的意思是在动画 end 之间的过渡期间,有一些看起来像错误的东西,它会在一秒钟内将视图移动到其原始位置?

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

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);
于 2012-07-30T09:23:51.847 回答