效果
新进入的页面从右边滑入,当前页面从左边滑出,按下返回键的时候,当前页面从右边滑出,前一个页面从左边滑入。
方法:给Activity设置主题
步骤一:写动画文件
res/anim/slide_in_left.xml 左边滑入动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0"
android:duration="300"/>
</set>
res/anim/slide_in_right.xml 右边滑入动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="300"/>
<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
android:duration="300" />
</set>
res/anim/slide_out_left.xml 左边滑出动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="300"/>
<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
android:duration="300" />
</set>
res/anim/slide_out_right.xml 右边滑出动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="300"/>
<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
android:duration="300" />
</set>
步骤二:定义style
res/values/styles.xml 文件中加入以下代码
<!-- Add by fycus_peng -->
<style name="RightInRightOutAnim" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
<item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item>
<item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
<item name="android:activityCloseExitAnimation">@anim/slide_out_right</item>
</style>
<style name="Animation_RightInRightOutActivity" parent="android:Theme.Light">
<item name="android:windowAnimationStyle">@style/RightInRightOutAnim</item>
</style>
步骤三:AndroidManifest.xml 中对应的Activity的android:theme属性
<activity
android:name="com.fycus.activityanimationtest.TestActivity"
android:theme="@style/Animation_RightInRightOutActivity"
android:label="@string/app_name" >
</activity>
对style中的Animation参数的理解:
先假设ActivityTest设置了这个动画的style:
这里的“EnterAnimation”的作用对象是ActivityTest,而“ExitAnimation”的作用对象是其他Activity
这里的“Open”是指ActivityTest的打开状态,“Close”是指其他Activity的状态。
所以就有下面的理解:
“OpenEnterAnimation” 可以理解为当ActivityTest要Open时 ActivityTest的Enter动画(某个Activity start ActivityTest,ActivityTest进入的动画)
“CloseEnterAnimation” 可以理解为当其他Activity要Close时,ActivityTest的Enter动画(某个Activity finish退出,ActivityTest进入的动画)
“OpenExitAnimation” 可以理解为当ActivityTest要Open时, 其他Activity Exit的动画 (某个Activity start ActivityTest,这个Activity退出的动画)
“CloseExitAnimation” 可以理解为当其他Activity要Close时,其他Activity退出的动画(某个Activity finish退出切换到ActivityTest,这个Activity退出的动画)
总结:
一个Activity可以指定自己进入时自己的Animation和别的Activity退出时的Animation。 而自己退出的Animation是由其他Activity指定的。
这里所说的 “当前Activity进入”分为两种不同的情况,一种是A start B, B Activity 进入;另一种是 C finish(), B 出栈。
所以两种情况,每种情况都对应一个入动画和出动画,一共是四种。
1. 在Activity中调用setTheme(R.style.other_style)方法,导致我在AndroidManifest中的android:theme被覆盖。
2. 将Activity设置成Dialog类型,
RightInRightOutAnim 没有效果,解决方法是将
RightInRightOutAnim 的parent改为 "@android:style/Animation.Dialog"
其他:
下面这段代码也可以设置动画style
<style name="Animation_Activity_RightInRightOut1" mce_bogus="1" parent="@android:style/Animation.Activity">
<item name="android:windowEnterAnimation">@anim/slide_in_right</item>
<item name="android:windowExitAnimation">@anim/slide_out_right</item>
<item name="android:windowHideAnimation">@anim/slide_out_left</item>
<item name="android:windowShowAnimation">@anim/slide_in_left</item>
</style>
android:windowEnterAnimation 就是指Activity进入时的动画
android:windowExitAnimation 就是指Activity退出的动画
android:windowShowAnimation 当其他app切换到这个Activity时会显示这个动画
android:windowHideAnimation 不知道,烦请赐教
这是设置window animation的属性,和设置Activity animation的属性还是有区别的,一个是Window的动画, 一个是Activity的动画。 也可以把这里的windowAnimation加入上面写的style中,或许就能感觉到区别了。
源码 http://download.youkuaiyun.com/detail/u010366911/7354563