在片段之间animation的共享元素

我试图从一个RecyclerView的选定项目animation2个简单的视图到一个新的片段。 我已经看了很多从一个Activity到另一个Activity的animation共享元素的例子,但是在同一个Activity中,很less有一个将一个共享元素从一个Fragmentanimation到另一个Fragment的例子。 它几乎工作。

这是我的结构。

活动

– 全屏Fragment1与RecyclerView

– 全屏Fragment2的细节

当用户在Fragment1的RecyclerView中select一个项目时,我用带有View的Fragment2replaceFragment1,其中的共享元素位于不同的位置和大小。

有一些技巧可以让它起作用,你必须确保你的transitionName对于列表中的每个项目是唯一的,当然transitionName必须和Fragment2中的元素的transitionName匹配,以供animation使用。 我有这个部分的工作,当我select一个项目,2共享视图做animation,只是不完全如何你会期望当做两个活动之间。

如果我select靠近屏幕底部的项目,它将绘制“片段视图2”并为其中的2个共享视图制作animation,就好像它们位于屏幕顶部的项目中一样。 很难解释。 这里有一些照片

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

Fragment2 我希望蓝线从底部到顶部有动画,但是从顶部开始,只能沿着水平方向增长,我希望黄色线保持靠近底部,但水平增长,但是从屏幕顶部开始和动画下来

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

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

也在他们的父Activity在onCreate()我已经设置

  getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); 

任何想法为什么我的共享元素animation是从我的屏幕的顶部开始,即使他们是在我的屏幕底部的选定项目开始?

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

终于解决了这个问题! 事实certificate,因为我在两个片段之间共享的视图是第二个片段中另一个视图(RelativeLayout)的子视图,所以您需要将ChangeTransform转换添加到您的TransitionSet。 显然ChangeTransform告诉系统在animation到第二个片段中的新位置之前记住第一个片段中的视图原始位置。 这是我更新的transitionSet。 我也会清理一下我的testing项目代码,并最终推动bitbucket,以便在我之后帮助其他人。 感谢Alex的帮助,并感谢@ George-mount回答某个类似的问题,这个解决scheme让我不知所措。

 <?xml version="1.0" encoding="utf-8"?> <transitionSet xmlns:android="http://schemas.android.com/apk/res/android"> <changeTransform/> <changeBounds/> </transitionSet> 

https://bitbucket.org/brockoli/fragmentsharedelements