方法 View.clearAnimation 和 Animation.AnimationListener.onAnimationEnd 有啥关系?
Posted
技术标签:
【中文标题】方法 View.clearAnimation 和 Animation.AnimationListener.onAnimationEnd 有啥关系?【英文标题】:How are methods View.clearAnimation and Animation.AnimationListener.onAnimationEnd related?方法 View.clearAnimation 和 Animation.AnimationListener.onAnimationEnd 有什么关系? 【发布时间】:2017-09-06 22:57:52 【问题描述】:我遇到了一个问题,setVisibility()
在将动画应用于视图一次后无法正常工作。
问题public void show(): 1. 在视图上调用 setVisibility(View.VISIBLE) 2.视图外观动画: view.animate().alpha(1.0f).setDuration(3000)。 等等……
public void hide() 1.视图消失动画: view.animate().alpha(0.0f).setDuration(3000)。 等等... 2. 视图可见性设置为 GONE
第一个 show() 方法调用正确显示所有内容。 之后调用 hide() 后,视图被正确隐藏。 现在调用 show(),将视图外观设置为动画直到动画的最后,然后视图立即消失(布局检查器指示其最终可见性已消失)这是我的初始动画代码:
myGridView.animate()
.alpha(0.0f)
.setDuration(100);
令人惊讶的是,添加AnimatorListenerAdapter
并覆盖onAnimationEnd
而不做任何其他事情解决了这个问题。
最近我发现了其他SO solution,他们在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
有某种关系?
【问题讨论】:
我无法理解以前没有发生的事情现在发生了。 @azizbekian 公平点。我现在已经编辑了这个问题。该视图过去在动画完成后立即消失,尽管在开始动画之前我将其可见性设置为可见。在覆盖 onAnimationEnd 方法后,它不仅在动画开始时保持可见,而且在它完成执行后也保持可见。 【参考方案1】:为什么覆盖 onAnimationEnd 会单独起作用?它是否与 clearAnimation 有某种关系?
clearAnimation()
将启动 onAnimationCancel()
,然后是 onAnimationEnd()
,以便在此视图具有的 Animation
上调用。
【讨论】:
以上是关于方法 View.clearAnimation 和 Animation.AnimationListener.onAnimationEnd 有啥关系?的主要内容,如果未能解决你的问题,请参考以下文章