有两种方式设置Activity的进入和退出动画,一种是直接在代码中设置,这需要使用到Activity的overridePendingTransition方法;另一种是通过自定义Activity的主题来实现。由于在代码中设置窗口的进入和退出动画会受到诸多限制,比如在非Activity类中调用startActivity()方法的情况。因此本文介绍第二种方式来为Activity设置进入和退出动画。
为窗口自定义进入和退出动画(该段代码放在res/values/styles.xml文件中):
</style>
<style name="ActivityInOutAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/push_left_in</item>
<item name="android:activityOpenExitAnimation">@anim/push_left_out</item>
<item name="android:activityCloseEnterAnimation">@anim/push_right_in</item>
<item name="android:activityCloseExitAnimation">@anim/push_right_out</item>
</style>
在Activity的自定义主题中调用该动画效果(该段代码放在res/values/styles.xml或者themes.xml文件中):
<style name="ActivityTheme_Light" parent="android:Theme.Light.NoTitleBar.Fullscreen">
<item name="android:windowAnimationStyle">@style/ActivityInOutAnimation</item>
<item name="android:windowEnableSplitTouch">false</item>
<item name="android:splitMotionEvents">false</item>
</style>
其中各动画具体如下(均放在res/anim文件夹下):
push_left_in.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="300"
android:fromXDelta="100%"
android:toXDelta="0" />
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="300"
android:fromXDelta="0"
android:toXDelta="-100%" />
</set>
push_right_in.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="300"
android:fromXDelta="-100%"
android:toXDelta="0" />
</set>
push_right_out.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="300"
android:fromXDelta="0"
android:toXDelta="100%" />
</set>