20

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

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

图片

4

1 回答 1

21

是的,过渡允许这样做。

在您的示例中,您的层次结构中已经有网格和详细视图。要使用转换,如果详细视图不在视图层次结构中开始,它会更好地工作。你需要交换这两种观点。

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

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

让共享的观点有共同点很重要。通常它是 View 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);
于 2015-02-08T06:06:59.707 回答