Android 片段 return 过渡使用带 Jetpack 导航的共享元素
Android fragment return transitions using shared elements with jetpack navigation
我一直在将我的应用程序迁移到 Android Jetpack 导航组件,但在共享元素转换方面遇到困难。
两个片段都设置了 transitionName
属性,我使用以下代码开始导航(根据 the animation documentation):
findNavController().navigate(
MainFragmentDirections.actionViewEvent(event.name),
FragmentNavigatorExtras(
backgroundElement to "event_card",
titleElement to "event_name"
)
)
最初,仅此一项根本行不通。但是,在将以下代码添加到目标片段后,共享元素在进入时已设置动画:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition(android.R.transition.move)
}
但是,仍然没有共享元素return过渡。是否可以在 enter 和 return 上启用转换? (当这两个片段是单独的活动时,我以前有过这个工作。)
知道我在使用操作栏时按照 the documentation 的建议覆盖了 Activity 中的 onSupportNavigateUp
可能是相关的。覆盖的方法如下:
override fun onSupportNavigateUp(): Boolean =
findNavController(R.id.nav_host).navigateUp(appBarConfiguration)
|| super.onSupportNavigateUp()
在我的例子中,无法为 return 过渡设置动画是因为 Glide 正在加载我正在 returning 的片段中的图像。
我按照 this answer 中的建议添加了一个侦听器,它解决了问题。
我将投票结束这个重复的问题,虽然我一开始没有意识到这是问题所在,但解决方案是一样的。
我一直在将我的应用程序迁移到 Android Jetpack 导航组件,但在共享元素转换方面遇到困难。
两个片段都设置了 transitionName
属性,我使用以下代码开始导航(根据 the animation documentation):
findNavController().navigate(
MainFragmentDirections.actionViewEvent(event.name),
FragmentNavigatorExtras(
backgroundElement to "event_card",
titleElement to "event_name"
)
)
最初,仅此一项根本行不通。但是,在将以下代码添加到目标片段后,共享元素在进入时已设置动画:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition(android.R.transition.move)
}
但是,仍然没有共享元素return过渡。是否可以在 enter 和 return 上启用转换? (当这两个片段是单独的活动时,我以前有过这个工作。)
知道我在使用操作栏时按照 the documentation 的建议覆盖了 Activity 中的 onSupportNavigateUp
可能是相关的。覆盖的方法如下:
override fun onSupportNavigateUp(): Boolean =
findNavController(R.id.nav_host).navigateUp(appBarConfiguration)
|| super.onSupportNavigateUp()
在我的例子中,无法为 return 过渡设置动画是因为 Glide 正在加载我正在 returning 的片段中的图像。
我按照 this answer 中的建议添加了一个侦听器,它解决了问题。
我将投票结束这个重复的问题,虽然我一开始没有意识到这是问题所在,但解决方案是一样的。