未执行活动转换(Lollipop)

时间:2015-08-24 04:34:35

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

我正在设置活动 X 和活动 Y 之间的转换动画。
X 包含带有图像的列表,单击图像时会展开并在活动 Y 中“缩放”。
因此,此图像是 X Y 之间的共享元素。我在XML布局中设置了transitionName属性 这是启动活动的代码 Y

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, clickedImage, clickedImage.getTransitionName());
startActivityForResult(intent, OPEN_PICTURE_REQUEST, options.toBundle());

直到这里,一切正常。但是,我还想在输入时为活动 Y 的布局设置动画 为此,我在XML文件(picture_enter.xml)中定义了转换:

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
    android:transitionOrdering="together">

    <transition
        class="android.transition.Explode"
        android:startDelay="200">
        <targets>
            <target android:targetId="@+id/top_toolbar_container" />
        </targets>
    </transition>

</transitionSet>

最后,在活动的onCreate Y 中,我将转型初步化:

TransitionInflater inflater = TransitionInflater.from(this);
Transition transition = inflater.inflateTransition(R.transition.picture_enter);
Window window = getWindow();
window.setEnterTransition(transition);

但这从未执行过。只有图像的“缩放”效果才能正常工作。我也尝试过以编程方式定义过渡 有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您应该使用具有以下窗口标记的应用程序主题:

<style name="CustomActionBarTheme" parent="Theme.AppCompat.Light.NoActionBar">

    <!-- enable window content transitions -->
    <item name="android:windowContentTransitions">true</item>

    <!-- enable overlapping of exiting and entering activities -->
    <item name="android:windowAllowEnterTransitionOverlap">true</item>
    <item name="android:windowAllowReturnTransitionOverlap">true</item>
</style>

在Mainfest文件中,使用内部应用程序标签   机器人:主题=&#34; @风格/ CustomActionBarTheme&#34;

在活动X中,

       ActivityOptionsCompat options = ActivityOptionsCompat
                                    .makeSceneTransitionAnimation(activity,img_pic, "img_pic");

其中&#34; img_pic&#34;是android:transitionName =&#34; img_pic&#34;在活动X和活动Y的两个布局文件中。

注意: android:transitionName值应该相同,以便进行转换。

使用ActivityOptionsCompat或ActivityOptions打开活动Y,

Intent intent = new Intent(context,Activity_Y.class);
startActivity(intent, options.toBundle());