如何在导航控制器中使用共享元素转换

新手上路,请多包涵

当导航到另一个片段时,我想使用导航架构组件添加共享元素转换。但我不知道如何。同样在文档中也没有关于它的内容。有人能帮我吗?

原文由 JPLauber 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 362
2 个回答

我参考了这个 github 示例 https://github.com/serbelga/android_navigation_shared_elements

 cardView.setOnClickListener{
  val extras = FragmentNavigatorExtras(
    imageView to "imageView"
  )
  findNavController().navigate(R.id.detailAction, null, null, extras)
}

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition(android.R.transition.move)

它工作正常。

原文由 Akash Patel 发布,翻译遵循 CC BY-SA 4.0 许可协议

第一个片段

val extras = FragmentNavigatorExtras(
    imageView to "secondTransitionName")
view.findNavController().navigate(R.id.confirmationAction,
    null, // Bundle of args
    null, // NavOptions
    extras)

first_fragment.xml

 <ImageView
    android:id="@+id/imageView"
    android:transitionName="firstTransitionName"
    ...
 />

第二片段

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View {
    sharedElementEnterTransition = ChangeBounds().apply {
        duration = 750
    }
    sharedElementReturnTransition= ChangeBounds().apply {
        duration = 750
    }
    return inflater.inflate(R.layout.second_fragment, container, false)
}

第二个片段.xml

 <ImageView
    android:transitionName="secondTransitionName"
    ...
 />

我测试了它。它起作用了。

原文由 Xzin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题