我在一个属于一个Activity的片段中有一个共享元素。
我想在Android Lollipop中使用属于另一个活动的片段的一部分的元素进行共享元素转换。
有可能吗?
我怎样才能做到这一点?
答案 0 :(得分:10)
这是可能的。
首先,当您在片段中检测到即将发生转换时,请构建一个Pair<View, String>
数组,并使用视图和转换名称填充该数组。
例如,如果要从缩略图图像设置为全宽图像:
Pair[] pairs = new Pair[1];
pairs[0] = new Pair(thumbnailImage, "THUMBNAIL_IMAGE");
其次,将该数组传递给片段的活动,以便它可以启动实际转换。 (我正在使用Otto传递该事件,如果您愿意,可以使用常规回调。)
然后,在您的活动中,开始第二项活动。 (我创建了一个简单的方法)
public static void transitionExpand(Activity activity, Intent intent, Pair<View, String>[] sharedElements) {
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements);
ActivityCompat.startActivity(activity, intent, options.toBundle());
}
在第二个活动中,您可以按常规方式添加片段。然后,在第二个片段的onViewCreated()
方法中,您可以调用:
ViewCompat.setTransitionName(fullWidthImage, "THUMBNAIL_IMAGE");
希望有所帮助
答案 1 :(得分:2)
更新:从v25.1.1 of the support library开始,这些相同的方法在支持片段中。指向文档的链接:Fragment.postponeEnterTransition()和Fragment.startPostponedEnterTransition()
原始回答:
即使在第二个Activity中动态添加片段,也是可能的。
在共享元素布局和测量之前,您只需告诉第二个Activity不要运行其Transition动画。
在第二个活动电话onCreate
的{{1}}中(如果您正在使用支持资源库,则为postponeEnterTransition()
)。将您的片段动态添加到此活动。在您动态添加的片段中的supportPostponeEnterTransition()
方法结束时,请致电onCreateView
。
这当然假设您已经完成了共享元素转换所需的所有其他操作,但我相信这些方法是您正在搜索的问题。
感谢@ alex-lockwood&#39; blog向我展示了光明。