我正在尝试将 2 个简单视图从 RecyclerView 中的选定项目设置为新片段。我看过很多将共享元素从一个 Activity 动画化到另一个 Activity 的示例,但很少有将共享元素从一个 Fragment 动画化到同一 Activity 内的另一个 Fragment 的示例。它几乎可以工作。
这是我的结构。
活动
-- 带有 RecyclerView 的全屏 Fragment1
-- 带有细节的全屏 Fragment2
当用户在 Fragment1 的 RecyclerView 中选择一个项目时,我将 Fragment1 替换为 Fragment2,该 Fragment2 具有一个 View,其中的共享元素处于不同的位置和大小。
让它工作有一点技巧,你必须确保你的 transitionName 对于列表中的每个项目都是唯一的,当然,transitionName 必须与 Fragment2 中元素的 transitionName 匹配才能播放动画。我有这部分工作,当我选择一个项目时,2 个共享视图会进行动画处理,但这与您在 2 个活动之间执行它时所期望的不完全一样。
如果我选择屏幕底部附近的一个项目,它会为 Fragment2 绘制视图并为 2 个共享视图设置动画,就好像它们位于屏幕顶部的项目中一样。很难解释。这里有一些图片
片段1
片段2
在这两个片段中,我设置以下
setSharedElementEnterTransition(new ChangeBounds());
setSharedElementReturnTransition(new ChangeBounds());
setAllowEnterTransitionOverlap(true);
setAllowReturnTransitionOverlap(true);
同样在他们的 onCreate() 父 Activity 我已经设置
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
知道为什么我的共享元素动画从屏幕顶部开始,即使它们从屏幕底部的选定项目开始?