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

问题描述 投票:0回答:1

我已按照文档使用新的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转换。任何线索?谢谢

android android-transitions shared-element-transition android-architecture-navigation
1个回答
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>

在这篇文章的时候,它没有写在新导航组件的文档中,但这只是旧的做法。由于导航组件为进入/退出转换做了一些魔术,我期望对共享视图进行更多操作。无论如何,添加这些行并不是什么大不了的事。

© www.soinside.com 2019 - 2024. All rights reserved.