方法View.clearAnimation和Animation.AnimationListener.onAnimationEnd如何相关?

时间:2017-04-11 13:49:40

标签: android animation visibility

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

问题
public void show():
 1.在视图上调用setVisibility(View.VISIBLE)  2.查看外观是动画的:     view.animate()。α(1.0F).setDuration(3000)。 等......

public void hide()
 1.查看消失动画:     view.animate()。α(0.0F).setDuration(3000)。 等...
 2.视图可见性设置为GONE

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

这是我的初始动画代码:

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

令人惊讶的是,添加AnimatorListenerAdapter并覆盖onAnimationEnd而不做任何其他事情就解决了这个问题。 最近,我找到了其他SO solution,他们在clearAnimation()之前的视图中调用了setVisibility()

所以,这在代码中起作用了:

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

有某种关联

1 个答案:

答案 0 :(得分:0)

  

为什么重写 onAnimationEnd 自己工作?它是否以某种方式与 clearAnimation 相关?

clearAnimation()会启动onAnimationCancel(),然后onAnimationEnd()会在此视图的Animation上进行调用。