我正在尝试使用共享元素在片段之间实现一些不错的转换,这就是我想要实现的目标:
当我从片段 1切换到片段 2时:
- 片段 1淡出
- 徽标移动到左上角
- 片段 2来自底部。
当我从片段 2切换到片段 3时:
- 片段 2淡出
- 标志“不动”
- 标题 1向左移动
- 标题2来自右边
- 片段 3来自底部
这是片段 1的设置:
Fagment1.java:
fragment.setExitTransition("fade"); //parameter shortened for readability
XML:
<ImageView [...]
android:id="@+id/octopuss"
android:transitionName="@string/octopuss"/>
这是片段 2的设置:
片段2.java:
fragment3.setEnterTransition("slide_bottom");
fragment3.setSharedElementEnterTransition("move");
fragment3.setExitTransition("fade");
XML:
<ImageView [...]
android:transitionName="@string/octopuss"/>
<TextView [...]
android:transitionName="title1"
android:id="@+id/title1" />
在 Activity 中调用片段 2:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction()
.replace(R.id.fullscreen_content, fragment2)
.addToBackStack("connection_transaction");
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
ft.addSharedElement(findViewById(R.id.octopuss), getString(R.string.octopuss));
ft.commit();
这是片段 3的设置:
片段3.java:
fragment3.setEnterTransition("slide_bottom");
fragment3.setSharedElementEnterTransition("slide_right");
XML:
<ImageView [...]
android:transitionName="@string/octopuss"/>
<TextView [...]
android:transitionName="title1"/>
在活动中调用fragmen 3:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction()
.replace(R.id.fullscreen_content, fragment3)
.addToBackStack("preferences_transaction");
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
ft.addSharedElement(findViewById(R.id.title1), "title1");
ft.commit();
片段 1和片段 2之间的每个过渡都非常有效。
但是当我调用片段 3时,每个片段都会开始它的 enterTransition\exitTansition ,就像它们根本没有共享元素一样:
- 标题 1 与片段 2一起淡出
- 标题 2 来自底部和片段 3
有人可以帮我找出原因吗?我错过了什么?