导航组件的共享视图过渡不起作用

时间:2019-03-04 19:45:24

标签: android android-transitions shared-element-transition android-architecture-navigation

我已经按照文档使用新的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过渡。有什么线索吗?谢谢

1 个答案:

答案 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编写,但这只是旧的方法。由于导航组件在进入/退出过渡方面发挥了不可思议的作用,所以我希望对共享视图也能做更多的事情。无论如何,添加这些行并不重要。