2

背景

Lollipop 引入了一种在活动之间转换的新方法(链接herehereherehere)。

问题

他们在其中一个视频(此处)中说,我可以准确地选择每个视图将如何转换,但我找不到如何做到这一点。我发现的唯一一件事是如何为所有视图设置它,除了“英雄”视图(您选择如何将其转换到新活动并返回)。

例如,让我们以具有以下屏幕的 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”转换,以及具有不同转换(例如淡出/淡入)的视图?

请举例说明如何做到这一点。如果需要,您可以使用我上面编写的代码。

4

1 回答 1

1

使用 a并使用andTransitionSet添加/排除某些目标。例如,假设您有两个视图,并且您希望它们中的每一个都以不同的方向滑出屏幕。您可以使用以下代码创建这样的转换:Transition#addTarget()Transition#excludeTarget()

TransitionSet set = new TransitionSet();

Transition slideUp = new Slide(Gravity.UP);
slideUp.addTarget(view1);
set.addTransition(slideUp);

Transition slideDown = new Slide(Gravity.DOWN);
slideDown.addTarget(view2);
set.addTransition(slideDown);

TransitionSet extends Transition,因此生成的set对象可以用作窗口内容过渡,它将同时并行播放两个幻灯片过渡。

于 2014-12-31T22:31:00.420 回答