我是Android开发的新手(来自Swift / iOS)。当我在视图外面点击时,我正在尝试为DialogFragment
的关闭添加一些动画。我已经阅读了各种关于Dialogs动画的帖子,并找到了有助于我的解决方案的这些帖子。
什么有效:
onStart()
正在运行)onClick()
正在运行)什么行不通:
从技术上讲,这是为了:
DialogFragment
AlertDialog.Builder
cancelable
属性设置为true
setCanceledOnTouchOutside
上将AlertDialog
属性设置为true。ObjectAnimator
制作动画onCancel
发生在onDismiss
的问题:
我很高兴在我的对话框中添加OnCancelListener
。但是,在运行时我收到一个错误,基本上是陈述
注意:DialogFragment拥有Dialog.setOnCancelListener和Dialog.setOnDismissListener回调。你不能自己设置它们。要了解这些事件,请覆盖onCancel(DialogInterface)和onDismiss(DialogInterface)。
确定。很容易,我想我会覆盖OnCancel
。
我做了,但是当我在警告对话框片段之外点击时,动画确实发生了。它仍然取消(关闭) - 只是没有动画。调试,我看到它进入我的代码,但是一旦我输入被覆盖的onCancel()
方法,警报就已经关闭/隐藏/取消。好像我在生命周期中为时已晚。由于我无法覆盖OnCancelListener
的{{1}},我想知道是否有人有解决方案或洞察我的困境。
长短: 我希望能够使用相同的动画来点击对话框的关闭按钮,就像在警报外点击一样。
这是我的代码段:
DialogFragments
这是onCancel覆盖:
public void onStart() {
super.onStart();
AlertDialog dialog = (AlertDialog)getDialog();
ObjectAnimator scaleUp = scaleUp(dialog);
scaleUp.start();
Button closeButton = dialog.getButton(Dialog.BUTTON_NEGATIVE);
closeButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
AlertDialog dialog = (AlertDialog)getDialog();
ObjectAnimator scaleDown = scaleDown(dialog);
scaleDown.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
dismiss();
}
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
scaleDown.start();
}
});
}
两种方法 @Override
public void onCancel(final DialogInterface dialog) {
ObjectAnimator scaleDown = scaleDown((AlertDialog)dialog);
scaleDown.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
Log.i("DialogFragment","onAnimationEnd");
dialog.dismiss();
}
@Override
public void onAnimationStart(Animator animation) {
Log.i("DialogFragment","onAnimationStart");
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
scaleDown.start();
}
和scaleUp
只是重构,它们只是scaleDown
的设置。
跟进: 我的解决方案的灵感来自标记为可能重复的一个。 Change DialogFragment enter/exit transition at just before dismissing,但这并没有解决我所概述的具体情况 - 在对话框外点击时的动画。
当我点击对话框内的按钮时,我从该链接使用的解决方案非常接近动画,但不处理ObjectAnimator