方法 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 有啥关系?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中构造方法和普通方法的区别

Javascript的私有变量和方法共有变量和方法以及特权方法构造器静态共有属性和静态共有方法

093 类和对象的绑定方法和非绑定方法

init()方法和构造方法的区别

Python中静态方法和类方法的区别

java中静态方法和实例方法的区别