方法View.clearAnimation和Animation.AnimationListener.onAnimatio



我遇到了一个问题,将动画应用于视图一次后setVisibility()将无法正常工作。

问题
public void show():
1. setVisibility(View.VISIBLE) 在视图 2 上被调用
。视图外观为动画: view.animate().alpha(1.0f).setDuration(3000).等。。。

公共虚空隐藏()
1.视图消失是动画的: view.animate().alpha(0.0f).setDuration(3000).等。。。
2. 视图可见性设置为"消失">

  • 第一个 show() 方法调用正确显示所有内容。
  • 之后调用 hide() 后,视图将正确隐藏。
  • 现在调用 show(),将视图外观设置为动画,直到动画的最后,之后视图立即消失(布局检查器指示其最终可见性消失)

这是我最初的动画代码:

myGridView.animate()
.alpha(0.0f)
.setDuration(100);

令人惊讶的是,添加AnimatorListenerAdapter并覆盖onAnimationEnd而不执行任何其他操作可以解决问题。 最近,我发现了其他SO解决方案,他们在setVisibility()之前调用视图上的clearAnimation()

因此,代码中的这起作用了:

myGridView.clearAnimation();
myGridView.setVisibility(View.VISIBLE);

我坚持的最终代码:

myGridView.animate()
.alpha(0.0f)
.setDuration(100);
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
myGridView.clearAnimation();
myGridView.setVisibility(GridView.GONE);
}
});

问题
为什么覆盖onAnimationEnd本身有效?它与clearAnimation有某种关系吗?

为什么覆盖onAnimationEnd可以独立工作?它与清除动画有某种关系吗?

clearAnimation()将启动onAnimationCancel(),然后是onAnimationEnd(),以Animation这种观点。

相关内容

  • 没有找到相关文章

最新更新