android:windowExitAnimation 不工作吗?
Is android:windowExitAnimation not working?
正如 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>
当我从 Activity1 (Hello World) 到 Activitity2 (Purple) 时,我只得到进入转换。从 Activity2 返回到 Activitiy1 时类似,仅显示输入转换。永远不会触发退出转换。
结果如下所示。
看起来 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)
}
}
然后我得到我想要的结果。
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>
exit_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="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>
看来我需要改用下面的方法
<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>
下面应该用于打开应用程序或关闭应用程序(或后台应用程序),而不是用于打开不同的 Android 活动(虽然很奇怪 android:windowEnterAnimation
有效用于打开 activity,并且会干扰(混合)android:activityOpenEnterAnimation
和 android:activityCloseEnterAnimation
)
<style name="WindowAnimations">
<item name="android:windowEnterAnimation">@anim/enter_activity</item>
<item name="android:windowExitAnimation">@anim/exit_activity</item>
</style>
windowEnterAnimation
有效但 windowExitAnimation
无效。
正如 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>
当我从 Activity1 (Hello World) 到 Activitity2 (Purple) 时,我只得到进入转换。从 Activity2 返回到 Activitiy1 时类似,仅显示输入转换。永远不会触发退出转换。
结果如下所示。
看起来 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)
}
}
然后我得到我想要的结果。
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>
exit_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="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>
看来我需要改用下面的方法
<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>
下面应该用于打开应用程序或关闭应用程序(或后台应用程序),而不是用于打开不同的 Android 活动(虽然很奇怪 android:windowEnterAnimation
有效用于打开 activity,并且会干扰(混合)android:activityOpenEnterAnimation
和 android:activityCloseEnterAnimation
)
<style name="WindowAnimations">
<item name="android:windowEnterAnimation">@anim/enter_activity</item>
<item name="android:windowExitAnimation">@anim/exit_activity</item>
</style>
windowEnterAnimation
有效但 windowExitAnimation
无效。