我正在尝试从RecyclerView中选择的一个项目中动画2个简单视图到一个新的片段。我查看了很多关于在不同Activity之间动画共享元素的例子,但很少有关于在同一Activity中从一个片段动画共享元素的例子。它几乎可以工作。
这是我的结构:
活动
--全屏碎片1具有RecyclerView
--具有详细信息的全屏碎片2
当用户在Fragment1的RecyclerView中选择项时,我将Fragment1替换为带有不同位置和大小的共享元素视图的Fragment2。
要使其正常工作,需要注意确保您列表中每个项目的transitionName是唯一的,并且当然该transitionName必须与Fragment2中的元素的transitionName匹配才能播放动画。我已经让这部分工作了,当我选择一个项目时,这两个共享视图确实会以动画方式显示,只是与在两个Activities之间执行时的预期结果略有不同。
如果我选择靠近屏幕底部的项目,它会绘制Fragment2的视图,并像它们是在屏幕顶部的项目一样动画显示这两个共享视图。有点难解释。以下是一些图片:
Fragment1
Fragment2
在两个片段中我都设置了以下内容:
setSharedElementEnterTransition(new ChangeBounds());
setSharedElementReturnTransition(new ChangeBounds());
setAllowEnterTransitionOverlap(true);
setAllowReturnTransitionOverlap(true);
在它们的父Activity的onCreate()方法中,我也进行了如下设置:
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
不知道为什么我的共享元素动画从屏幕顶部开始,即使它们在屏幕底部的选定项目中开始?
Activity#postponeEnterTransition()
和Activity#startPostponedEnterTransition()
解决了大部分问题...但是对于Fragment
,没有等效的方法可用,所以我很好奇在使用Fragment
转场时是否有不同的解决方法... - Alex Lockwood