我已经按照文档使用新的Navigation组件实现了共享视图转换,但是它不起作用。这就是我所拥有的:
片段A具有这段代码来调用片段B
val extras = FragmentNavigatorExtras(
taskNameInput to "taskName")
findNavController().navigate(R.id.action_aFragment_to_BFragment,
null), // Bundle of args
null, // NavOptions
extras)
看看布局,该ID的过渡名称设置如下:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/taskNameInput"
android:transitionName="taskName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
...
然后FragmentB在布局中具有以下视图:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/taskNameInput"
android:transitionName="taskName"
android:layout_width="0dp"
android:layout_height="wrap_content"
...>
从fragmentA转到fragmentB时,播放输入动画,但不播放sharedView过渡。有什么线索吗?谢谢
答案 0 :(得分:0)
缺少将sharedTransition设置为FragmentB的方法,可以在onCrateView()中完成,如下所示:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition(R.transition.move)
return inflater.inflate(com.meanwhile.flatmates.R.layout.fragment_b, container, false)
}
还需要创建事务文件move.xml:
<transitionSet>
<changeBounds/>
<changeTransform/>
<changeClipBounds/>
<changeImageTransform/>
</transitionSet>
在撰写本文时,它尚未在文档中为新的Navigation Component编写,但这只是旧的方法。由于导航组件在进入/退出过渡方面发挥了不可思议的作用,所以我希望对共享视图也能做更多的事情。无论如何,添加这些行并不重要。