属于Android棒棒糖中不同活动的片段之间的共享元素转换

时间:2014-12-17 11:35:14

标签: android animation android-fragments android-animation android-5.0-lollipop

我在一个属于一个Activity的片段中有一个共享元素。

我想在Android Lollipop中使用属于另一个活动的片段的一部分的元素进行共享元素转换。

有可能吗?

我怎样才能做到这一点?

2 个答案:

答案 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向我展示了光明。