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

Mat*_*ska 10 animation android android-animation android-fragments android-5.0-lollipop

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

我想在Android Lollipop中进行共享元素转换,其元素是属于另一个活动的片段的一部分.

可能吗?

我怎样才能做到这一点?

Tom*_*lec 10

这是可能的.

首先,当您在片段中检测到即将发生转换时,请构建一个Pair<View, String>使用视图和转换名称填充的数组.

例如,如果要从缩略图图像设置为全宽图像:

  Pair[] pairs = new Pair[1];
  pairs[0] = new Pair(thumbnailImage, "THUMBNAIL_IMAGE");
Run Code Online (Sandbox Code Playgroud)

其次,将该数组传递给片段的活动,以便它可以启动实际的转换.(我正在使用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());
}
Run Code Online (Sandbox Code Playgroud)

在第二个活动中,您可以按常规方式添加片段.然后,在第二个片段的onViewCreated()方法中,您可以调用:

ViewCompat.setTransitionName(fullWidthImage, "THUMBNAIL_IMAGE");
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你

  • 在第二个片段的布局中的共享视图上设置android:transitionName ="THUMBNAIL_IMAGE"也可以.我还发现这个解决方案只适用于在父XML中静态声明的片段,而不是动态添加的片段. (3认同)