Android fragments Android导航:共享元素转换在片段之间不起作用
我按照指示做了 这是我的密码:Android fragments Android导航:共享元素转换在片段之间不起作用,android-fragments,android-animation,android-navigation,shared-element-transition,Android Fragments,Android Animation,Android Navigation,Shared Element Transition,我按照指示做了 这是我的密码: val navDirections = PostsListFragmentDirections.actionPostsListFragmentToPostDetailFragment(post) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { val animationExtras = FragmentNavigatorExtras( title to title.t
val navDirections = PostsListFragmentDirections.actionPostsListFragmentToPostDetailFragment(post)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
val animationExtras = FragmentNavigatorExtras(
title to title.transitionName,
body to body.transitionName
)
navigateWithAnimations(navDirections, animationExtras)
} else {
navigateTo(navDirections)
}
navigateTo
和navigateWithAnimations
是扩展功能:
fun Fragment.navigateTo(navDirections: NavDirections) {
NavHostFragment.findNavController(this).navigate(navDirections)
}
fun Fragment.navigateWithAnimations(navDirections: NavDirections, extras: Navigator.Extras) {
NavHostFragment.findNavController(this).navigate(navDirections, extras)
}
代码正在执行,但动画不起作用
这是nav_graph.xml
<fragment
android:id="@+id/postsListFragment"
android:name="PostsListFragment"
android:label="PostsListFragment">
<action
android:id="@+id/action_postsListFragment_to_postDetailFragment"
app:destination="@id/postDetailFragment">
<argument
android:name="post"
app:argType="Post"
app:nullable="true"
android:defaultValue="@null" />
</action>
</fragment>
<fragment
android:id="@+id/postDetailFragment"
android:name="PostDetailsFragment"
android:label="PostDetailFragment">
<argument
android:name="post"
app:argType="Post"
app:nullable="true"
android:defaultValue="@null" />
</fragment>
在这两个XML文件中,我定义了:
android:transitionName="transition_title"
android:transitionName="transition_body"
您是否在第二个片段中建立了sharedElementEnterTransition属性?您必须在onCreate方法中执行以下操作:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
main = requireActivity() as MainActivity
sharedElementEnterTransition = ChangeBounds().apply {
duration = 750
interpolator = AccelerateDecelerateInterpolator()
}
sharedElementReturnTransition = ChangeBounds().apply {
duration = 750
interpolator = AccelerateDecelerateInterpolator()
}
}
换句话说,接收片段需要知道如何处理共享元素。您是否在第二个片段中建立了sharedElementEnterTransition属性?您必须在onCreate方法中执行以下操作:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
main = requireActivity() as MainActivity
sharedElementEnterTransition = ChangeBounds().apply {
duration = 750
interpolator = AccelerateDecelerateInterpolator()
}
sharedElementReturnTransition = ChangeBounds().apply {
duration = 750
interpolator = AccelerateDecelerateInterpolator()
}
}
换句话说,接收片段需要知道如何处理共享元素。有解决方案吗?我面临着同样的问题您使用的SDK版本是什么?有什么解决方案吗?我面临着同样的问题您使用的是什么SDK版本?