在关闭时对对话框片段进行动画处理

2024-02-17

我试图让一个对话框片段在关闭时进行动画处理 - 我试图覆盖下面的解雇,onDismiss,onCancel 和 onDestroy 方法,但没有运气 - 有人可以指出我正确的方向吗?

@Override
public void dismiss() {
    if (mDismissAnimationFinished) {
        super.dismiss();
    } else {

        mShrink.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                mDismissAnimationFinished = true;
                dismiss();
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
        mCurrentContainer.startAnimation(mShrink);
    }
}

我只是用常规对话框子类执行此操作,我的解决方案应该转移到DialogFragment确切地。

看起来你们很接近,只是你应该打电话super.dismiss()在 onAnimationEnd() 而不是dismiss()。原因是如果你打电话dismiss(),它会递归调用你已经在的函数!

EDIT:

在外部类中定义一个包装方法或使用您的 DialogFragment.super() 调用它。

void parentDismiss() { super.dismiss() }

并从你的电话中调用它onAnimationEnd().

即使如此,当您取消对话框并且它被另一个线程取消时,您仍然会遇到竞争条件的另一个问题。为了解决这个问题,设置一个布尔值mIsDismissed第一次调用 onDismiss() 时,如果在另一个调用之前再次调用它onStart()发生(您将重写 onStart() 以将布尔值翻转回来)onDismiss()的身体不会被执行两次。

我这里写了一个解决方案,没有使用DialogFragment,只是一个普通的对话框。它已经过测试并且可以工作,因此只需查看我使用的逻辑并复制它,或者如果您愿意,可以使用它。

https://github.com/tom-dignan/nifty/blob/master/src/com/tomdignan/nifty/dialogs/NiftyProgressDialog.java https://github.com/tom-dignan/nifty/blob/master/src/com/tomdignan/nifty/dialogs/NiftyProgressDialog.java

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在关闭时对对话框片段进行动画处理 的相关文章

随机推荐