首先说明以下,activity切换动画有两种方式,开发人员可以根据自己的需要自己选择。
一、在startactivity之后调用overridePendingTransition(int enterAnim, int outAnim)这个方法。

在Android2.0之后,当程序在Activity之间进行切换时,可以添加切换动画的。其实添加Activity切换动画只是很简单的调用一个api函数:overridePendingTransition(int enterAnim, int outAnim),两个参数分别指向两个定义动画的xml文件资源,下面先用一段简单的代码说明该函数的使用方法。
假设有两个Activity,分别为A和B。
当在A中启动B时,可以使用如下方式添加动画:
首先在xml中定义两个动画,放在R.anim文件夹目录下:


right_left_out.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="400"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="-100%p"
        android:toYDelta="0" />
</set> 

right_left_in.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="400"
        android:fromXDelta="100%p"
        android:fromYDelta="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="0"
        android:toYDelta="0" />
</set>


然后在A中启动B时,就可以利用这两个动画定义文件让A和B的切换过程产生动画下过,如下代码片段演示:


Intent intent = new Intent(A.this, B.class);
A.this.startActivity(intent); 

//参数一是下一个Activity的进入动画,参数二是当前Activity的退出动画
overridePendingTransition(R.anim.right_left_in, R.anim.right_left_out);


在B中返回A时,可以使用如下动画:


left_right_out.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="400"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="100%p"
        android:toYDelta="0" />
</set> 

left_right_in.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="400"
        android:fromXDelta="-100%p"
        android:fromYDelta="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="0"
        android:toYDelta="0" />
</set>


代码片段:
B.this.finish();
overridePendingTransition(R.anim.left_right_in, R.anim.left_right.out);
如果希望在用户按返回键是从B退回到A时也能够有动画效果,则需要在B中截取按钮事件,并手动结束当前Activity。代码片段如下:


@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
{
    if (keyCode == KeyEvent.KEYCODE_BACK)
    {
        B.this.finish();
                overridePendingTransition(R.anim.left_right_in, R.anim.left_right_out);
            return true;
    }
    return super.onKeyUp(keyCode, event);
}


这个方法比较简单吧,只用调用一个api就行了。但是如果activity比较多,可以让所有的activity都继承一个baseactivity,然后继承baseactivity里面的startactivity和finish方法,切换动画效果都在baseactivity里面完成就行了,这也是比较简单的,代码就不列了。

二、使用theme主题来设置切换动画
我们知道,在Manifest文件中声明Activity时,可以通过android:theme属性设置Activity的主题。主题中定义了关于Activity外观的很多特性。同时,主题中还可以定义Activity的切换动画。通过主题的形式定义的Activity切换动画,甚至可以超越API的限制,在2.0以下的系统版本中依然能够设置Activity切换动画。
        下面就一个简单的例子说明怎么定义包含Activity切换动画的主题。
         首先,我们先看一下包含动画的主题是怎么定义的。在R.values文件夹中新建一个style.xml的文件,在其中插入一个<style />节点,声明一个主题,代码如下:


R.values.style:
    <style name="Activity.Theme" parent="@android:style/Theme.NoTitleBar">
        <item name="android:windowAnimationStyle">@style/anim_activity</item>
    </style>


可以看到,以上主题的父主题是@android:style/Theme.NoTitleBar, 就是继承自系统主题的大部分属性。
其中有一个"android:windowAnimationStyle"属性是由我们自定义的,定位的位置同样在R.values.style文件中。代码如下:


<style name="anim_activity" mce_bogus="1" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/activity_open_in_anim</item>
        <item name="android:activityOpenExitAnimation">@anim/activity_open_out_anim</item>
        <item name="android:activityCloseEnterAnimation">@anim/activity_close_in_anim</item>
        <item name="android:activityCloseExitAnimation">@anim/activity_close_out_anim</item>
    </style>


现在假设有两个Activity, A 和 B。 在A中可以启动B. 同时,A,B的theme属性均设置为上面定义的属性。那么,以上动画的发生时机如下:
(1)当A启动B时,A退出,B进入,A退出时的动画名称为android:activityOpenExitAnimation,动画文件为
R.anim.activity_open_out_anim. B进入时的动画名称为android:activityOpenEnterAnimation, 动画文件为R.anim.activity_open_in_anim.
(2)当B结束时,B退出,A进入。B退出的动画名称为android:activityCloseExitAnimation, 动画文件为R.anim.activity_close_out_anim. A进入时的动画名称为android:activityCloseEnterAnimation, 动画文件为R.anim.activity_close_in_anim.
通过以上设置,Activity切换时便可以显示切换动画效果。
下面四个文件定位的是上面用到的四个动画。


R.anim.activity_close_in_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

    <translate
        android:duration="400"
        android:fromXDelta="-100%p"
        android:fromYDelta="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="0"
        android:toYDelta="0" /> 

</set> 

R.anim.activity_close_out_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="400"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="100%p"
        android:toYDelta="0" />
</set> 

R.anim.activity_open_in_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

    <translate
        android:duration="400"
        android:fromXDelta="100%p"
        android:fromYDelta="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="0"
        android:toYDelta="0" /> 

</set> 

 R.anim.activity_open_out_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

    <translate
        android:duration="400"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toXDelta="-100%p"
        android:toYDelta="0" /> 

</set>


补充一下,xml中设置的资料:

android 修改activity 进出场动画 activity切换动画_xml

从上图可以看出,以手机屏幕下面边未X轴,屏幕左边为Y轴,当Activity在X轴值为-100%p时,刚好在屏幕的左边(位置1),当X轴值为0%p时,刚好再屏幕内(位置2),当X=100%p时刚好在屏幕右边(位置3)。

清楚了位置后,我们就可以实现左右滑动滑动的切换效果,首先让要退出的Activity从位置2移动到位置1,同时让进入的Activity从位置3移动位置2,这样就能实现从左右切换效果。