摘自:http://fuyunhe.iteye.com/blog/1834874 android
咱們知道,在Manifest文件中聲明Activity時,能夠經過android:theme屬性設置Activity的主題。主題中定義了關於Activity外觀的不少特性。同時,主題中還能夠定義Activity的切換動畫。經過主題的形式定義的Activity切換動畫,甚至能夠超越API的限制,在2.0如下的系統版本中依然可以設置Activity切換動畫。動畫
下面就一個簡單的例子說明怎麼定義包含Activity切換動畫的主題。spa
首先,咱們先看一下包含動畫的主題是怎麼定義的。在R.values文件夾中新建一個style.xml的文件,在其中插入一個<style />節點,聲明一個主題,代碼以下:.net
R.values.style:orm
<style name="Activity.Theme" mce_bogus="1" parent="@android :style/Theme.NoTitleBar"> blog
<item name="android:windowAnimationStyle">@style/anim_activity</item> 繼承
</style> utf-8
能夠看到,以上主題的父主題是@android :style/Theme.NoTitleBar, 就是繼承自系統主題的大部分屬性。get
其中有一個"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>