下面就一個簡單的例子說明怎麼定義包含Activity切換動畫的主題。
首先,我們先看一下包含動畫的主題是怎麼定義的。在R.values文件夾中新建一個style.xml的文件,在其中插入一個<style />節點,聲明一個主題,代碼如下:
R.values.style:
- <style name="Activity.Theme" mce_bogus="1" 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>
下一篇文章中,我將說一下如何在存在大量Activity需要設置動畫時,對大量動畫如何進行管理,與相應的Activity進行一一對應。