我遇到了一个问题,将动画应用于视图一次后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
这种观点。