Activity的切换动画实际上是Android的View Animation(视图动画)中的Tween Animation效果,Tween Animation分为4种动画效果,分别是:alpha (透明变化) translate(位置移动) scale(缩放) rotate(旋转), 而左右滑动切换使用的是 translate(位置移动)的效果,在下一篇我们再讨论一下 alpha (透明变化) 、scale(缩放)、 rotate(旋转) 这三种效果,本篇只将 translate(位置移动)。
直接上代码
在 res目录创建anim目录, 然后在目录创建动画的xml文件:out_to_left.xml (从左边退出动画) 、in_from_right.xml(从右边进入动画)、out_to_right.xml(从右边退出动画)、in_from_left.xml(从左边进入动画)
1.in_from_left
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromXDelta="-100%p"
android:interpolator="@android:anim/linear_interpolator"
android:toXDelta="0%p" >
</translate>
2.in_from_right
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromXDelta="100%p"
android:interpolator="@android:anim/linear_interpolator"
android:toXDelta="0%p" >
</translate>
3.out_to_left
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromXDelta="0%p"
android:toXDelta="-100%p"
android:interpolator="@android:anim/linear_interpolator" >
</translate>
4.out_to_right
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromXDelta="0%p"
android:toXDelta="100%p"
android:interpolator="@android:anim/linear_interpolator" >
</translate>
修改主题文件
在values文件夹中打开style.xml的文件,在其中插入一个style节点,声明一个主题。
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">#FF9800</item>
<item name="colorPrimaryDark">#FF5722</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowAnimationStyle">@style/fade</item>
</style>
<style name="fade" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/in_from_right</item>
<item name="android:activityOpenExitAnimation">@anim/out_to_left</item>
<item name="android:activityCloseEnterAnimation">@anim/in_from_left</item>
<item name="android:activityCloseExitAnimation">@anim/out_to_right</item>
</style>
</resources>
主要添加
<item name="android:windowAnimationStyle">@style/fade</item>
<style name="fade" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/in_from_right</item>
<item name="android:activityOpenExitAnimation">@anim/out_to_left</item>
<item name="android:activityCloseEnterAnimation">@anim/in_from_left</item>
<item name="android:activityCloseExitAnimation">@anim/out_to_right</item>
</style>
现在假设有两个Activity A 和 B,在A中可以启动B。同时,A和B的theme属性均设置为上面定义的属性。那么,以上动画的发生时机如下:
(1)当A启动B时,A退出,B进入,A退出时的动画名称为android:activityOpenExitAnimation,动画文件为
R.anim.out_to_left,B进入时的动画名称为android:activityOpenEnterAnimation, 动画文件为R.anim.in_from_right。
(2)当B结束时,B退出,A进入。B退出的动画名称为android:activityCloseExitAnimation, 动画文件为R.anim.out_to_right, A进入时的动画名称为android:activityCloseEnterAnimation, 动画文件为R.anim.in_from_left。
原文链接:https://blog.csdn.net/u012301841/article/details/46920809