转载请注明出处:http://blog.csdn.net/szyangzhen/article/details/47357237
今天没事总结了一下activity切换动画相关知识,包括淡入淡出动画,左滑入右滑出,顶部滑入底部滑出等比较简单的动画,现在记录如下
activity淡入动画,放在文件act_switch_fade_in.xml中
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@integer/animation_duration"
android:fromAlpha="0.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="1.0" />
activity淡出动画,放在act_switch_fade_out.xml中
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@integer/animation_duration"
android:fromAlpha="1.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="0.0" />
activity底部滑入动画,放在act_switch_translate_bottom2screen.xml中
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="100%"
android:toYDelta="0%"
android:duration="@integer/animation_duration"
>
</translate>
activity顶部滑入动画,放在act_switch_translate_top2screen.xml中
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="-100%"
android:toYDelta="0%"
android:duration="@integer/animation_duration"
>
</translate>
activity左边滑入动画,放在act_switch_translate_left2screen.xml中
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="-100%"
android:toXDelta="0%"
android:duration="@integer/animation_duration"
>
</translate>
activity右边滑入动画,放在act_switch_translate_right2screen.xml中
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="100%"
android:toXDelta="0%"
android:duration="@integer/animation_duration"
>
</translate>
activity底部滑出动画(滑动到底部隐藏),放在act_switch_translate_screen2bottom.xml中
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="0%"
android:toYDelta="100%"
android:duration="@integer/animation_duration"
>
</translate>
activity顶部滑出动画(滑动到顶部隐藏),放在act_switch_translate_screen2top.xml中
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="0%"
android:toYDelta="-100%"
android:duration="@integer/animation_duration"
>
</translate>
activity左边滑出动画(滑动到左边隐藏),放在act_switch_translate_screen2left.xml中
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0%"
android:toXDelta="-100%"
android:duration="@integer/animation_duration"
>
</translate>
activity右边滑出动画(滑动到右边隐藏),放在act_switch_translate_screen2right.xml中
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0%"
android:toXDelta="100%"
android:duration="@integer/animation_duration"
>
</translate>
这些activity动画定义好了,还需要定义样式及主题,我就直接上代码了,里面都有注释
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="animation_duration">200</integer>
<!-- 淡入淡出动画 -->
<style name="activity_switch_fade" parent="AppTheme">
<item name="android:windowAnimationStyle">@style/fade</item>
</style>
<!--
第一个表示新的activity创建进入效果,
第2个表示activity还没有finish()下退出效果,
第3个表示上一个activity返回进入效果,
第4个表示的是activity finish()之后退出效果
比如有两个activity A和B, A上面有个按钮可以打开B, 点击按钮后,此时A执行第二个动画(android:activityOpenExitAnimation)
B执行第一个动画(android:activityOpenEnterAnimation)
如此此时按下返回键,B退出,A显示,则此时A执行动画3(android:activityCloseEnterAnimation)
B执行动画4(android:activityCloseExitAnimation)
-->
<style name="fade" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/act_switch_fade_in</item>
<item name="android:activityOpenExitAnimation">@anim/act_switch_no_anim</item>
<item name="android:activityCloseEnterAnimation">@anim/act_switch_no_anim</item>
<item name="android:activityCloseExitAnimation">@anim/act_switch_fade_out</item>
</style>
<!-- 左边滑入左边滑出 -->
<style name="activity_switch_translate_left" parent="AppTheme">
<item name="android:windowAnimationStyle">@style/translate_left</item>
</style>
<!--
第一个表示新的activity创建进入效果,
第2个表示activity还没有finish()下退出效果,
第3个表示上一个activity返回进入效果,
第4个表示的是activity finish()之后退出效果
比如有两个activity A和B, A上面有个按钮可以打开B, 点击按钮后,此时A执行第二个动画(android:activityOpenExitAnimation)
B执行第一个动画(android:activityOpenEnterAnimation)
如此此时按下返回键,B退出,A显示,则此时A执行动画3(android:activityCloseEnterAnimation)
B执行动画4(android:activityCloseExitAnimation)
-->
<style name="translate_left" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/act_switch_translate_left2screen</item>
<item name="android:activityOpenExitAnimation">@anim/act_switch_no_anim</item>
<item name="android:activityCloseEnterAnimation">@anim/act_switch_no_anim</item>
<item name="android:activityCloseExitAnimation">@anim/act_switch_translate_screen2left</item>
</style>
<!-- 右边滑入右边滑出 -->
<style name="activity_switch_translate_right" parent="AppTheme">
<item name="android:windowAnimationStyle">@style/translate_right</item>
</style>
<!--
第一个表示新的activity创建进入效果,
第2个表示activity还没有finish()下退出效果,
第3个表示上一个activity返回进入效果,
第4个表示的是activity finish()之后退出效果
比如有两个activity A和B, A上面有个按钮可以打开B, 点击按钮后,此时A执行第二个动画(android:activityOpenExitAnimation)
B执行第一个动画(android:activityOpenEnterAnimation)
如此此时按下返回键,B退出,A显示,则此时A执行动画3(android:activityCloseEnterAnimation)
B执行动画4(android:activityCloseExitAnimation)
-->
<style name="translate_right" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/act_switch_translate_right2screen</item>
<item name="android:activityOpenExitAnimation">@anim/act_switch_no_anim</item>
<item name="android:activityCloseEnterAnimation">@anim/act_switch_no_anim</item>
<item name="android:activityCloseExitAnimation">@anim/act_switch_translate_screen2right</item>
</style>
<!-- 顶部滑入顶部滑出 -->
<style name="activity_switch_translate_top" parent="AppTheme">
<item name="android:windowAnimationStyle">@style/translate_top</item>
</style>
<!--
第一个表示新的activity创建进入效果,
第2个表示activity还没有finish()下退出效果,
第3个表示上一个activity返回进入效果,
第4个表示的是activity finish()之后退出效果
比如有两个activity A和B, A上面有个按钮可以打开B, 点击按钮后,此时A执行第二个动画(android:activityOpenExitAnimation)
B执行第一个动画(android:activityOpenEnterAnimation)
如此此时按下返回键,B退出,A显示,则此时A执行动画3(android:activityCloseEnterAnimation)
B执行动画4(android:activityCloseExitAnimation)
-->
<style name="translate_top" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/act_switch_translate_top2screen</item>
<item name="android:activityOpenExitAnimation">@anim/act_switch_no_anim</item>
<item name="android:activityCloseEnterAnimation">@anim/act_switch_no_anim</item>
<item name="android:activityCloseExitAnimation">@anim/act_switch_translate_screen2top</item>
</style>
<!-- 底部滑入底部滑出 -->
<style name="activity_switch_translate_bottom" parent="AppTheme">
<item name="android:windowAnimationStyle">@style/translate_bottom</item>
</style>
<!--
第一个表示新的activity创建进入效果,
第2个表示activity还没有finish()下退出效果,
第3个表示上一个activity返回进入效果,
第4个表示的是activity finish()之后退出效果
比如有两个activity A和B, A上面有个按钮可以打开B, 点击按钮后,此时A执行第二个动画(android:activityOpenExitAnimation)
B执行第一个动画(android:activityOpenEnterAnimation)
如此此时按下返回键,B退出,A显示,则此时A执行动画3(android:activityCloseEnterAnimation)
B执行动画4(android:activityCloseExitAnimation)
-->
<style name="translate_bottom" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/act_switch_translate_bottom2screen</item>
<item name="android:activityOpenExitAnimation">@anim/act_switch_no_anim</item>
<item name="android:activityCloseEnterAnimation">@anim/act_switch_no_anim</item>
<item name="android:activityCloseExitAnimation">@anim/act_switch_translate_screen2bottom</item>
</style>
<!-- 顶部滑入底部滑出 -->
<style name="activity_switch_translate_top_bottom" parent="AppTheme">
<item name="android:windowAnimationStyle">@style/translate_top_bottom</item>
</style>
<!--
第一个表示新的activity创建进入效果,
第2个表示activity还没有finish()下退出效果,
第3个表示上一个activity返回进入效果,
第4个表示的是activity finish()之后退出效果
比如有两个activity A和B, A上面有个按钮可以打开B, 点击按钮后,此时A执行第二个动画(android:activityOpenExitAnimation)
B执行第一个动画(android:activityOpenEnterAnimation)
如此此时按下返回键,B退出,A显示,则此时A执行动画3(android:activityCloseEnterAnimation)
B执行动画4(android:activityCloseExitAnimation)
-->
<style name="translate_top_bottom" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/act_switch_translate_top2screen</item>
<item name="android:activityOpenExitAnimation">@anim/act_switch_translate_screen2bottom</item>
<item name="android:activityCloseEnterAnimation">@anim/act_switch_translate_bottom2screen</item>
<item name="android:activityCloseExitAnimation">@anim/act_switch_translate_screen2top</item>
</style>
<!-- 底部滑入顶部滑出 -->
<style name="activity_switch_translate_bottom_top" parent="AppTheme">
<item name="android:windowAnimationStyle">@style/translate_bottom_top</item>
</style>
<!--
第一个表示新的activity创建进入效果,
第2个表示activity还没有finish()下退出效果,
第3个表示上一个activity返回进入效果,
第4个表示的是activity finish()之后退出效果
比如有两个activity A和B, A上面有个按钮可以打开B, 点击按钮后,此时A执行第二个动画(android:activityOpenExitAnimation)
B执行第一个动画(android:activityOpenEnterAnimation)
如此此时按下返回键,B退出,A显示,则此时A执行动画3(android:activityCloseEnterAnimation)
B执行动画4(android:activityCloseExitAnimation)
-->
<style name="translate_bottom_top" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/act_switch_translate_bottom2screen</item>
<item name="android:activityOpenExitAnimation">@anim/act_switch_translate_screen2top</item>
<item name="android:activityCloseEnterAnimation">@anim/act_switch_translate_top2screen</item>
<item name="android:activityCloseExitAnimation">@anim/act_switch_translate_screen2bottom</item>
</style>
<!-- 左边滑入右边滑出 -->
<style name="activity_switch_translate_left_right" parent="AppTheme">
<item name="android:windowAnimationStyle">@style/translate_left_right</item>
</style>
<!--
第一个表示新的activity创建进入效果,
第2个表示activity还没有finish()下退出效果,
第3个表示上一个activity返回进入效果,
第4个表示的是activity finish()之后退出效果
比如有两个activity A和B, A上面有个按钮可以打开B, 点击按钮后,此时A执行第二个动画(android:activityOpenExitAnimation)
B执行第一个动画(android:activityOpenEnterAnimation)
如此此时按下返回键,B退出,A显示,则此时A执行动画3(android:activityCloseEnterAnimation)
B执行动画4(android:activityCloseExitAnimation)
-->
<style name="translate_left_right" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/act_switch_translate_left2screen</item>
<item name="android:activityOpenExitAnimation">@anim/act_switch_translate_screen2right</item>
<item name="android:activityCloseEnterAnimation">@anim/act_switch_translate_right2screen</item>
<item name="android:activityCloseExitAnimation">@anim/act_switch_translate_screen2left</item>
</style>
<!-- 右边滑入左边滑出 -->
<style name="activity_switch_translate_right_left" parent="AppTheme">
<item name="android:windowAnimationStyle">@style/translate_right_left</item>
</style>
<!--
第一个表示新的activity创建进入效果,
第2个表示activity还没有finish()下退出效果,
第3个表示上一个activity返回进入效果,
第4个表示的是activity finish()之后退出效果
比如有两个activity A和B, A上面有个按钮可以打开B, 点击按钮后,此时A执行第二个动画(android:activityOpenExitAnimation)
B执行第一个动画(android:activityOpenEnterAnimation)
如此此时按下返回键,B退出,A显示,则此时A执行动画3(android:activityCloseEnterAnimation)
B执行动画4(android:activityCloseExitAnimation)
-->
<style name="translate_right_left" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/act_switch_translate_right2screen</item>
<item name="android:activityOpenExitAnimation">@anim/act_switch_translate_screen2left</item>
<item name="android:activityCloseEnterAnimation">@anim/act_switch_translate_left2screen</item>
<item name="android:activityCloseExitAnimation">@anim/act_switch_translate_screen2right</item>
</style>
</resources>
这个文件里定义了各种activity切换动画主题,大家需要运用哪种切换动画直接运用主题到appliation就行了,即在Manifest.xml文件里的application标签加上这么一个属性(比如想实现activity从顶部滑入底部滑出,应如下设置)
android:theme="@style/activity_switch_translate_top_bottom"
大家可以下载试下效果,下载后解压有一个anim文件夹入在res下即可,还有一个xml文件,activity_switch_anim.xml文件需要放在values文件夹下