android:windowExitAnimation 不起作用吗?

Ely*_*lye 1 animation android transition android-activity

正如 Google 在https://youtu.be/N_x7SV3I3P0中提到的

view.animation仍然是Windows过渡动画的方式。

因此我使用

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowAnimationStyle">@style/WindowAnimations</item>
    </style>

    <style name="WindowAnimations">
        <item name="android:windowEnterAnimation">@anim/enter_activity</item>
        <item name="android:windowExitAnimation">@anim/exit_activity</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

当我从 Activity1(Hello World)到 Activity2(紫色)时,我只得到输入转换。从 Activity2 返回到 Activity1 时类似,仅显示输入转换。退出转换永远不会被触发。

下面显示的是结果。

在此输入图像描述

看起来android:windowExitAnimation不起作用?(即如果我删除它,效果是一样的)。

为了解决这个问题,在我的 Activity2 中,我使用overridePendingTransition(R.anim.enter_activity, R.anim.exit_activity)如下所示的方法。

class Main2Activity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)
        overridePendingTransition(R.anim.enter_activity, R.anim.exit_activity)
    }

    override fun finish() {
        super.finish()
        overridePendingTransition(R.anim.enter_activity, R.anim.exit_activity)
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我得到了我想要的结果。

在此输入图像描述

有错误吗android:windowExitAnimation?或者我错过了什么?


p/s: 我的过渡动画 XML 如下

Enter_activity.xml

<set android:shareInterpolator="false"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="0.0"
        android:toXScale="1.0"
        android:fromYScale="0.0"
        android:toYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="2000" />
</set>
Run Code Online (Sandbox Code Playgroud)

退出活动.xml

<set android:shareInterpolator="false"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="0.0"
        android:fromYScale="1.0"
        android:toYScale="0.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="2000" />
</set>
Run Code Online (Sandbox Code Playgroud)

Ely*_*lye 5

看来我需要使用下面的

<style name="WindowAnimations">
    <item name="android:activityOpenEnterAnimation">@anim/enter_activity</item>
    <item name="android:activityOpenExitAnimation">@anim/exit_activity</item>
    <item name="android:activityCloseEnterAnimation">@anim/enter_activity</item>
    <item name="android:activityCloseExitAnimation">@anim/exit_activity</item>
</style>
Run Code Online (Sandbox Code Playgroud)

下面的内容应该用于打开应用程序或关闭应用程序(或后台应用程序),而不是用于打开不同的Android活动(尽管奇怪的是,它android:windowEnterAnimation适用于打开活动,并且会干扰(混合)android:activityOpenEnterAnimationandroid:activityCloseEnterAnimation

<style name="WindowAnimations">
    <item name="android:windowEnterAnimation">@anim/enter_activity</item>
    <item name="android:windowExitAnimation">@anim/exit_activity</item>
</style>
Run Code Online (Sandbox Code Playgroud)

有效windowEnterAnimation,但不是windowExitAnimation