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

时间:2015-02-07 19:29:31

标签: android android-5.0-lollipop mvp android-transitions

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

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

Image

1 个答案:

答案 0 :(得分:19)

是的,过渡允许这样做。

在您的示例中,您的层次结构中已包含网格视图和详细视图。要使用转换,如果详细信息视图未在View层次结构中启动,则效果会更好。您需要交换两个视图。

有两种(类似的)方法可以做到这一点。第一种是在场景中使用网格视图。然后使用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);