gpt4 book ai didi

android - 在关闭之前更改 DialogFragment 进入/退出转换

转载 作者:IT老高 更新时间:2023-10-28 21:36:58 31 4
gpt4 key购买 nike

我有一个 DialogFragment,我在 onActivityCreated 方法中设置了进入/退出动画,如下所示:

  @Override
public void onActivityCreated(Bundle arg0) {
super.onActivityCreated(arg0);
getDialog().getWindow()
.getAttributes().windowAnimations = R.style.DialogAnimation;
}

我的DialogAnimation样式文件如下:

<style name="DialogAnimation">
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>

这对我有用...

现在我的问题是我想要两个不同的退出动画,一个用于单击“确定”按钮,一个用于取消按钮。所以我所做的就是在解雇之前尝试更改过渡,但没有奏效。

有什么办法可以实现吗?

这是我尝试过的:

  @Override
public void onClick(View v) {
getDialog().getWindow()
.getAttributes().windowAnimations = R.style.DialogAnimation2;
this.dismiss();
}

最佳答案

您可以在 DialogFragment 中执行此操作,无需更改

getDialog().getWindow()
.getAttributes().windowAnimations

您应该在 onStart 和 onClick 中为“装饰 View ”设置动画。

这是截取的代码:

先创建对话框

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setTitle("Hello from animated dialog :)")
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//we have to add button here and then override it's click in onStart
}
}
)
.setCancelable(false)
.create();
}

然后重写 onStart 方法

@Override
public void onStart() {
super.onStart();

AlertDialog dialog = (AlertDialog)getDialog();

final View decorView = getDialog()
.getWindow()
.getDecorView();

ObjectAnimator scaleDown = ObjectAnimator.ofPropertyValuesHolder(decorView,
PropertyValuesHolder.ofFloat("scaleX", 0.0f, 1.0f),
PropertyValuesHolder.ofFloat("scaleY", 0.0f, 1.0f),
PropertyValuesHolder.ofFloat("alpha", 0.0f, 1.0f));
scaleDown.setDuration(2000);
scaleDown.start();


Button positiveButton = dialog.getButton(Dialog.BUTTON_NEGATIVE);
positiveButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
final View decorView = getDialog()
.getWindow()
.getDecorView();

ObjectAnimator scaleDown = ObjectAnimator.ofPropertyValuesHolder(decorView,
PropertyValuesHolder.ofFloat("scaleX", 1.0f, 0.0f),
PropertyValuesHolder.ofFloat("scaleY", 1.0f, 0.0f),
PropertyValuesHolder.ofFloat("alpha", 1.0f, 0.0f));
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.setDuration(2000);
scaleDown.start();
}
});
}

这是结果动画

Demo of the result


如果您从我的代码中删除缩放属性,您将只获得 alpha 动画。完全如您所愿。

删除这个:

PropertyValuesHolder.ofFloat("scaleX", 1.0f, 0.0f),
PropertyValuesHolder.ofFloat("scaleY", 1.0f, 0.0f),

关于android - 在关闭之前更改 DialogFragment 进入/退出转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32908279/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com