活动转换未执行(棒棒糖)

16

我正在为activity X和activity Y之间的转换添加动画效果。
X中包含一个带有图片的列表,当单击某张图片时,在activity Y中会将其放大并"缩放"显示。
因此,这张图片是XY之间的共享元素。我已经在XML布局中设置了其transitionName属性。
这是启动activity 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>

最后,在活动 YonCreate 中初始化过渡:

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

但这从未被执行。只有图像的"缩放"效果按预期工作。我还尝试过以编程方式定义过渡效果。
有什么建议吗?


我怀疑<targets>标签是这种奇怪行为的主要原因。如果您删除<targets>标签,则默认情况下转换将应用于activity Y。小建议:您可以直接在transitionSet中定义转换,例如explodeslide等,transition标签主要用于定义自定义转换。 - blizzard
1个回答

4

您应该在以下窗口标签中使用应用程序主题:

<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>

在Manifest文件中,在application标签内使用android:theme="@style/CustomActionBarTheme"。

在活动X中,

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

在Activity X和Activity Y的布局文件中,"img_pic"是android:transitionName="img_pic"。

注意:android:transitionName的值必须相同才能进行转换。

使用ActivityOptionsCompat或ActivityOptions打开Activity Y。

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

我已经尝试将这些值添加到styles.xml文件中,但仍然无法正常工作,不过还是谢谢。 - Alessandro Roaro
顺便提一句,styles.xml文件必须位于drawable-v21文件夹下。 - JItesh SUvarna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接