当前位置:  开发笔记 > 编程语言 > 正文

android animate()withEndAction()vs setListener()onAnimationEnd()

如何解决《androidanimate()withEndAction()vssetListener()onAnimationEnd()》经验,为你挑选了1个好方法。

我经常使用ViewPropertyAnimator并使用withEndAction()函数设置结束动作,如:

view.animate().translationY(0).withEndAction(new Runnable() {
    @Override
    public void run() {
        // do something
    }
}).start();

但您也可以设置结束动作设置特殊监听器,如:

view.animate().translationY(0).setListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        // do something
    }
});

那么这两种方法之间有什么区别,何时应该使用它们?



1> daemmie..:

没有太大的区别,看看源代码.

两者都执行onAnimationEnd.

但是runnable在启动后会被删除.所以Runnable只执行一次,可能会多次调用Listener.

@Override
public void onAnimationEnd(Animator animation) {
    mView.setHasTransientState(false);
    if (mListener != null) {
        mListener.onAnimationEnd(animation);  // this is your listener
    }
    if (mAnimatorOnEndMap != null) {
        Runnable r = mAnimatorOnEndMap.get(animation); // this is your runnable
        if (r != null) {
            r.run();
        }
            mAnimatorOnEndMap.remove(animation);
    }
    if (mAnimatorCleanupMap != null) {
        Runnable r = mAnimatorCleanupMap.get(animation);  
        if (r != null) {
            r.run();
        }
        mAnimatorCleanupMap.remove(animation);
    }
    mAnimatorMap.remove(animation);
}


没问题.我希望你得到更多的赞成.在我看来,这是一个非常有趣的问题.:)
推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有