Fragment共享元素过渡的实现
- 为每个共享元素视图分配一个唯一的过渡名称
- FragmentNavigator 添加共享元素
- 设置共享元素过渡动画
- 给要共享元素分配名称
FragmentA
android:transitionName="search"
<RelativeLayout
android:id="@+id/search_area_rl"
android:layout_width="200dp"
android:layout_height="70dp"
android:transitionName="search"
>
FragmenB
android:transitionName="search"
<RelativeLayout
android:id="@+id/search_rl"
android:layout_width="700dp"
android:layout_height="70dp"
android:transitionName="search"
- 跳转添加共享元素 FragmentA
FragmentNavigator.Extras extras = new FragmentNavigator.Extras.Builder()
.addSharedElement(searchAreaRl, "search")
.build();
Navigation.findNavController(v).navigate(R.id.action_recipesGatherFragment_to_recipesSearchFragment,null,null,extras);
- 设置共享元素过渡动画 FragmenB
@Override
public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setSharedElementEnterTransition( TransitionInflater.from(requireContext())
.inflateTransition(R.transition.shared_search));
}
res/transition/shared_search
<transitionSet>
<changeScroll />
<changeBounds />
</transitionSet>