我正在尝试使用片段进行此类动画
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的退出转换,我没有设置。任何人都可以解释原因吗?