替换片段时的圆形揭示动画

7

我很想知道如何在替换碎片的同时制作一个圆形揭示动画。

我正在使用以下代码来替换我的碎片:

        getFragmentManager()
            .beginTransaction()
            .replace(R.id.mission_detail_appointment_container, new AppointmentDeclineFragment())
            .commit();

我有一段代码,可以执行环形揭示动画:

Animator anim = ViewAnimationUtils.createCircularReveal(appointmentContainer, (int)motionEventX, (int)motionEventY, 0, finalRadius);
anim.start();

当我替换我的片段时,有没有办法启动动画?我刚刚看到了setCustomAnimation方法,但它需要int资源作为参数,而我有一个Animator对象。

谢谢你的帮助

1个回答

20

我最终找到了一个解决方法。对于那些可能需要的人,这就是我决定在片段中实现我的圆形展示动画的方式。

通过在我的片段的onCreateView方法中添加一个onLayoutChangeListener:

 view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {

            @TargetApi(Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                v.removeOnLayoutChangeListener(this);
                int cx = getArguments().getInt(MOTION_X_ARG);
                int cy = getArguments().getInt(MOTION_Y_ARG);
                int width = getResources().getDimensionPixelSize(R.dimen.fragment_appointment_width);
                int height = getResources().getDimensionPixelSize(R.dimen.fragment_appointment_height);

                float finalRadius = Math.max(width, height) / 2 + Math.max(width - cx, height - cy);
                Animator anim = ViewAnimationUtils.createCircularReveal(v, cx, cy, 0, finalRadius);
                anim.setDuration(500);
                anim.start();
            }
        });

2
你能提供完整的代码吗?MOTION_X_ARG、MOTION_Y_ARG、R.dimen.fragment_appointment_width和R.dimen.fragment_appointment_height的值是什么? - Parikshit Chalke
这些是通过参数传递到片段中的值,并指定动画开始的位置。它们取决于您的布局。 - Melllvar
兄弟!!太棒了! - OhhhThatVarun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接