Android 如何制作从ViewPager到另一片段的共享过渡动画?

Android 如何制作从ViewPager到另一片段的共享过渡动画?,android,android-fragments,android-viewpager,kotlin,android-transitions,Android,Android Fragments,Android Viewpager,Kotlin,Android Transitions,我有下一种情况活动[FragmentWithPager[PageWithGrid]]我想将列表项的动画转换为详细片段,但我不知道我做错了什么。我已将相同的transitionName添加到列表项和片段细节布局中的视图中,并尝试使用下面的代码进行转换动画 val fragmentTransaction = supportFragmentManager.beginTransaction() transitionItems.forEach { view -> fragmentTransa

我有下一种情况<代码>活动[FragmentWithPager[PageWithGrid]]我想将
列表项
的动画转换为
详细片段
,但我不知道我做错了什么。我已将相同的
transitionName
添加到
列表项
片段细节
布局中的视图中,并尝试使用下面的代码进行转换动画

val fragmentTransaction = supportFragmentManager.beginTransaction()
transitionItems.forEach { view ->
    fragmentTransaction.addSharedElement(view, view.transitionName)
}

val fragment = DetailFragment()
val transitionSet = TransitionSet().apply {
     addTransition(ChangeTransform())
     addTransition(ChangeClipBounds())
     addTransition(ChangeBounds())
}
fragment.sharedElementEnterTransition = transitionSet
fragment.sharedElementReturnTransition = transitionSet

fragmentTransaction.replace(R.id.root, fragment)
fragmentTransaction.addToBackStack(null)
fragmentTransaction.commit()

实现共享转换的步骤如下

  • 制作过渡动画
  • xml视图中的转换名称
  • 使用fragmentTransition对象以及目标视图和要执行的转换添加SharedElement

您可以查看参考资料,

共享元素转换API有点棘手,并且有一些未定义的行为,即使您能够实现这一点,转换也不会很顺利,以下是我几个月前实现的解决方法:

不要直接将
GridFragment
托管在
ViewPagerFragment
中,而是添加另一个
Fragment
作为容器:

Activity[ViewPagerFragment[ContainerFragment[GridFragment]]]

现在您有了一个简单的片段到片段的转换,它可以顺利地工作

下面是中的示例代码


我发现谷歌提供的这个示例非常有用,它以非常漂亮的方式处理片段


希望它能帮助你

我发现我做错了什么如果使用寻呼机切换片段,则列表和页面中的每个项目的转换名称必须是唯一的。当我将页面和列表索引添加到每个转换名称时,动画开始工作


祝贺您顺利过渡到工作岗位。为什么不自己创建一个答案,并解释您必须更改的内容,然后选择它作为正确答案(在您的奖金结束之前)?我相信它将来也会帮助别人。