Android:当从片段

时间:2016-08-02 19:02:23

标签: android android-fragments animation dialog android-dialogfragment

美好的一天。我遇到问题,当对话框动画从片段调用对话框时停止工作。 首先,我尝试使用自定义样式的DialogFragment:

    public static class QRDialog extends DialogFragment {

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
        dialog.setCancelable(true);
        ImageView im = new ImageView(getActivity());
        im.setImageResource(R.drawable.qr_code_placeholder);

        im.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        im.setClickable(true);
        im.setScaleType(ImageView.ScaleType.FIT_XY);
        im.setAdjustViewBounds(true);

        im.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
        dialog.setView(im);
        return dialog.create();
    }

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

那些XSlideAnimation是简单的动画风格:

    <style name="XSlideAnimation" >
    <item name="android:windowEnterAnimation">@android:anim/slide_in_left</item>
    <item name="android:windowExitAnimation">@android:anim/slide_out_right</item>
    </style>

它没有用。

然后我尝试为片段事务设置自定义动画:

    FragmentTransaction tr = getFragmentManager().beginTransaction();
            tr.setCustomAnimations(R.anim.in, R.anim.out);
            new QRDialog().show(tr, "dialog");

in.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromYDelta="50%"
        android:toYDelta="0"
        android:duration="500"
        />
</set>

out.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromYDelta="0"
        android:toYDelta="50%"
        android:duration="500"
        />
</set>

也没有成功。

然后我尝试获取新的Dialog实例并为其设置动画:

final Dialog dialog = new Dialog(getActivity());
        ImageView im = new ImageView(getActivity());
        im.setImageResource(R.drawable.qr_code_placeholder);

        im.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        im.setClickable(true);
        im.setScaleType(ImageView.ScaleType.FIT_XY);
        im.setAdjustViewBounds(true);
        dialog.setContentView(im);
        im.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });
        dialog.getWindow().getAttributes().windowAnimations = R.style.XSlideAnimation;
        dialog.setCancelable(true);
        dialog.show();

只有当我从活动中调用对话框时,动画才能完美。当我在片段中放入完全相同的代码时,动画停止工作。第一种方法也来自活动,但不是片段。

如何在片段中创建对话框时能够获得动画效果吗?

UPD 16-102017: 到目前为止,我在这里看不到任何答案或评论,但是有人一度赞成这个问题。所以,只是为了更新 - 在我的情况下,它刚刚开始工作。我完全没有代码。动画刚刚出现,几天后在测试期间稳定了。

0 个答案:

没有答案