片段的Android共享元素转换出口?

时间:2015-09-11 11:04:31

标签: android android-fragments android-transitions

我正在尝试使用片段进行此类动画

https://i.imgur.com/rUkkfUZ.gif

我有片段A和片段B

片段A包含图片的回收者视图。 按下图片时,它将转到片段B。

片段B将具有相同的图像,但在屏幕顶部。

我想要一个过渡,将所选图像移到顶部以使其无缝。

当它返回时,即从片段B到片段A,但它从A到B不起作用。

这是我的代码

   FragmentB fragmentB = FragmentB.newInstance(someURL);
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Transition transition = TransitionInflater.from(this).inflateTransition(R.transition.mytransition);

            Fragment fragmenAt = fragmentManager.findFragmentById(R.id.fragmentContainer);
            if(fragmentA != null && fragmentA instanceof FragmentA){
//                fragment.setSharedElementReturnTransition(transition);
//                fragment.setSharedElementEnterTransition(transition);
            }

            fragmentB.setSharedElementEnterTransition(transition);
            if (sharedTransitionElementView != null) {
                fragmentB.setSharedTransitionName(sharedTransitionElementView.getTransitionName());
                fragmentTransaction.addSharedElement(sharedTransitionElementView, sharedTransitionElementView.getTransitionName());
            }

        }

        fragmentTransaction.replace(R.id.fragmentContainer, fragmentB);
        fragmentTransaction.addToBackStack(FragmentB.class.getName());
        fragmentTransaction.commit();

上面的代码在我的活动中。

步骤是创建片段B的实例并找到片段A

由于片段A是回收者视图,因此每个视图项在运行时都被赋予一个转换名称,该名称通过setSharedTransitionName()方法传递给片段B

现在注释行是我发生混乱的地方,我没有setSharedElementExitTransition。

如何将片段A中的图像设置为动画到屏幕顶部?

重复一遍,当我从FragmentA回到FragmentB时,它会起作用,图像从顶部动画到列表中的位置。

更新1

所以我改变了我的转变

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android" android:duration="750" android:startDelay="150" android:interpolator="@android:interpolator/accelerate_decelerate">
    <changeTransform/>
    <slide android:slideEdge="top"/>
    <changeImageTransform/>
    <changeBounds/>
</transitionSet>

只有这一行

fragmentB.setSharedElementEnterTransition(transition);

我似乎得到了片段A的退出转换,我没有设置。任何人都可以解释原因吗?

0 个答案:

没有答案