视图之间的共享元素转换(不是活动或片段)

Shared Element Transitions Between Views (not Activities or Fragments)

假设我正在使用基于视图的方法来开发 Android 应用程序,如下文所述:http://corner.squareup.com/2014/10/advocating-against-android-fragments.html

所以现在我有两个全屏视图。一个是可见的,包含图像网格。另一个是隐藏的,是待点击图像的详细视图。在网格中单击图像时没有过渡,网格视图将被隐藏并显示详细视图。现在,如果我想要在网格视图中的小图像和详细视图中的大图像之间进行类似于共享元素转换的操作,该怎么办。这样的事情可能吗?

是的,转换允许这样做。

在您的示例中,您的层次结构中已有网格视图和详细视图。要使用过渡,如果细节视图不在视图层次结构中开始,效果会更好。你需要交换两个意见。

有两种(相似的)方法可以做到这一点。第一种是在场景中使用网格视图。然后使用 TransitionManager.go(detailScene, transition).

第二种方法是使用TransitionManager.beginDelayedTransition,然后将详细布局换成网格布局。

让共享的视图有共同点很重要。通常它是一个视图 ID 或 transitionName。此链接将告诉过渡系统,即使视图是不同的实例。

您要使用的转换是@android:transition/move。它结合了 ChangBounds、ChangeTransform、ChangeImageTransform 和 ChangeClipBounds。您必须以共享元素视图为目标。对于进入和/或退出视图,您似乎需要另一个过渡(淡入淡出?)。

像这样:

TransitionSet shared = ...
shared.addTarget("sharedName");
gridElement.setTransitionName("sharedName");
Fade fade = new Fade();
fade.excludeTarget("sharedName", true);
TransitionSet set = new TransitionSet();
set.addTransition(shared)
   .addTransition(fade);
TransitionManager.go(detailScene, set);