我在一个属于某个Activity的Fragment中有一个共享元素。我想使用另一个Activity中的Fragment中的元素来进行Android Lollipop平台上的共享元素过渡效果。
这是否可能?如何实现?
这是否可能?如何实现?
这是可能的。
首先,在您的片段中检测到即将发生转换时,建立一个数组Pair<View, String>
,其中包含视图和转换名称。
例如,如果您想要从缩略图像动画到全宽图像:
Pair[] pairs = new Pair[1];
pairs[0] = new Pair(thumbnailImage, "THUMBNAIL_IMAGE");
其次,将该数组传递给Fragment的Activity,以便它可以启动实际的转换。(我使用Otto将该事件传递上去,您可以使用常规回调函数)。
然后,在您的Activity中,启动第二个Activity。(我创建了一个简单的方法来完成这个操作)
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()
方法中,您可以调用:
在您的第二个活动中,您可以像往常一样添加片段。然后,在第二个片段的 onViewCreated()
方法中,您可以调用:
ViewCompat.setTransitionName(fullWidthImage, "THUMBNAIL_IMAGE");
希望它能有所帮助
onCreate
中调用postponeEnterTransition()
(如果您使用支持库,则调用supportPostponeEnterTransition()
)。将片段动态添加到此活动中。在您动态添加的片段的onCreateView
方法末尾,调用getActivity().startPostponedEnterTransition()
。