Android 导航组件不工作的共享视图转换

Android 导航组件不工作的共享视图转换,android,android-transitions,shared-element-transition,android-architecture-navigation,Android,Android Transitions,Shared Element Transition,Android Architecture Navigation,我已经按照文档使用新的导航组件实现了共享视图转换,但它不起作用。这就是我所拥有的: 片段A具有调用片段B的代码 val extras = FragmentNavigatorExtras( taskNameInput to "taskName") findNavController().navigate(R.id.action_aFragment_to_BFragment, null), // Bundle of args

我已经按照文档使用新的导航组件实现了共享视图转换,但它不起作用。这就是我所拥有的:

片段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"
        ...
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)
}

缺少将sharedTransition设置为FragmentB的功能,可以在onCrateView()中完成,如下所示:

<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/taskNameInput"
        android:transitionName="taskName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        ...
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>


在撰写本文时,它并没有写入新导航组件的文档中,但这只是旧的做法。由于导航组件正在为进入/退出转换发挥一些神奇的作用,所以我还希望为共享视图转换发挥更多的作用。在任何情况下,添加这些行都没有什么大不了的。

您的意思是我应该只在res.transition.move.xml中添加这些行而不添加其他标记吗?如果是这样的话,它的工作方式很奇怪。图像只是从右上角滑动到左下角。我想,过渡动画必须以不同的方式工作。我缺少什么?这是一个常见的过渡,但它实际上取决于你想要实现什么。您可能需要使用标记或其他类型的转换,甚至可以节省一些并简化,