片段之间animation的共享元素

我正在尝试将RecyclerView中所选项目的2个简单视图设置为新片段。 我已经查看了很多将共享元素从一个Activityanimation到另一个Activity的示例,但很少有animation将共享元素从一个Fragmentanimation到同一个Activity中的另一个Fragment的例子。 它几乎可以工作。

这是我的结构。

活动

– 使用RecyclerView的全屏Fragment1

– 带有详细信息的全屏Fragment2

当用户在Fragment1中的RecyclerView中选择一个项目时,我将Fragment1替换为具有View的Fragment2,其中包含不同位置和大小的共享元素。

要让它工作有一些技巧,你必须确保你的transitionName对于列表中的每个项都是唯一的,当然,transitionName必须与Fragment2中元素的transitionName匹配才能播放animation。 我有这个部分工作,当我选择一个项目时,2个共享视图会animation,而不是在两个活动之间进行animation时的预期。

如果我选择屏幕底部附近的项目,它会绘制View for Fragment2并为2个共享视图设置animation,就好像它们位于屏幕顶部的项目中一样。 很难解释。 这是一些照片

片段1 选择列表底部附近的项目

Fragment2 我希望蓝线从底部到顶部动画,但它从顶部开始并且只在水平方向上增长,黄色线我希望保持在底部附近但水平增长,但它从屏幕顶部开始并动画下来

在这两个片段中我都设置了以下内容

setSharedElementEnterTransition(new ChangeBounds()); setSharedElementReturnTransition(new ChangeBounds()); setAllowEnterTransitionOverlap(true); setAllowReturnTransitionOverlap(true); 

同样在他们的onCreate()中的父Activity中我设置了

  getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); 

我知道为什么我的共享元素animation从我的屏幕顶部开始,即使它们是从屏幕底部的选定项目开始的?

Solutions Collecting From Web of "片段之间animation的共享元素"

终于解决了这个问题! 事实certificate,因为我在2个片段之间共享的视图是第二个片段中另一个视图(RelativeLayout)的子视图,所以需要将ChangeTransform过渡添加到TransitionSet。 显然,ChangeTransform告诉系统在animation到第二个片段中的新位置之前,记住第一个片段中的视图原始位置。 这是我更新的transitionSet。 我还会稍微清理我的测试项目代码并最终推送到bitbucket以防万一它会帮助我之后的其他人。 感谢Alex对这一个人的所有帮助,感谢@ George-mount回答某些类似的问题,这个问题对我的解决方案没有任何暗示。

 < ?xml version="1.0" encoding="utf-8"?>     

https://bitbucket.org/brockoli/fragmentsharedelements