How to make shared transition animation from ViewPager to another Fragment?

时间:2018-03-25 18:51:31

标签: android android-fragments android-viewpager kotlin android-transitions

I have the next situation. Activity[FragmentWithPager[PageWithGrid]] and I want to make trandition animation from list item to DetailFragment but I don't know wnat I do wrong. I have added the same transitionName to views in list item and fragment detail layouts and try to make transition animatiot with the code below.

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()

4 个答案:

答案 0 :(得分:5)

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

example project

答案 1 :(得分:3)

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

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

Activity[ViewPagerFragment[ContainerFragment[GridFragment]]]

现在你有一个简单的Fragment to Fragment Transition可以顺利运行。

以下是my github repo

中的示例代码

Screen Shot

答案 2 :(得分:1)

实施共享转换的步骤是

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

您可以查找参考123

答案 3 :(得分:0)

我通过谷歌发现这个样本非常有用,它以非常漂亮的方式处理片段 google transition sample

希望它能帮助你