背景
Lollipop 引入了一种在活动之间转换的新方法(链接here、here、here和here)。
问题
他们在其中一个视频(此处)中说,我可以准确地选择每个视图将如何转换,但我找不到如何做到这一点。我发现的唯一一件事是如何为所有视图设置它,除了“英雄”视图(您选择如何将其转换到新活动并返回)。
例如,让我们以具有以下屏幕的 Google Now 应用为例:
当你点击editText时,底部的卡片有“爆炸”的效果,但一切都变暗了,editText后面的imageView淡出。
editText 可能是“英雄”视图,它在活动之间转换,并且因为它位于屏幕上的同一位置,这可能对用户没有任何视觉效果。
我试过的
我试图模仿谷歌现在所做的,但正如我所写的,imageView 也有“爆炸”效果,所以它到底部,在 listView 后面,这是一个奇怪的效果(因为它被裁剪而动画)。我希望它要么动画到不同的方向,要么只是淡出。
这是我正在使用的转换的示例代码:
final Intent intent = new Intent(activity, SearchActivity.class);
ViewCompat.setTransitionName(viewToTransitionFromAndTo, VIEW_TO_TRANSITION_TO);
final ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
viewToTransitionFromAndTo, VIEW_TO_TRANSITION_TO);
ActivityCompat.startActivityForResult(activity, intent, requestCode, options.toBundle());
在启动其他活动的活动主题中,我有这个:
<style name="AppTheme.transition" parent="@style/AppTheme">
<!-- transition support -->
<item name="android:windowContentTransitions" tools:targetApi="21">true</item>
<item name="android:windowActivityTransitions" tools:targetApi="21">true</item>
<item name="android:windowEnterTransition" tools:targetApi="21">@transition/explode</item>
<item name="android:windowExitTransition" tools:targetApi="21">@transition/explode</item>
<item name="android:windowSharedElementEnterTransition" tools:targetApi="21">@transition/move_image</item>
<item name="android:windowSharedElementExitTransition" tools:targetApi="21">@transition/move_image</item>
<item name="android:windowAllowReturnTransitionOverlap" tools:targetApi="21">true</item>
<item name="android:windowAllowEnterTransitionOverlap" tools:targetApi="21">false</item>
</style>
过渡文件是:
爆炸.xml
<?xml version="1.0" encoding="utf-8"?>
<explode />
move_image.xml
<?xml version="1.0" encoding="utf-8"?>
<transitionSet>
<changeBounds />
<changeImageTransform />
</transitionSet>
问题
我如何选择每个视图在转换时会做什么,而不是只说所有内容都具有相同的效果(“英雄”视图除外)?
例如,是否可以为除“hero”视图之外的所有视图选择“explode”转换,以及具有不同转换(例如淡出/淡入)的视图?
请举例说明如何做到这一点。如果需要,您可以使用我上面编写的代码。