為 Activity 設定切換動畫
我們知道,我們可以在 AndroidManifest.xml 檔案中,通過 android:theme 屬性設定 Activity 的主題。主題中定義了關于 Activity 外觀的很多特性。同時,主題中還可以定義 Activity 的切換動畫。這是應用 Activity 切換動畫的一種方法。下面講解一下如何通過主題來設定 Activity 間的切換動畫。
定義包含動畫的 Activity 主題
res/values/styles.xml,很簡單,就是使用 windowAnimationStyle 這個屬性,指定切換動畫的style即可。
<style name="AnimActivityTheme">
<item name="android:windowAnimationStyle">@style/FeelyouWindowAnimTheme</item>
</style>
定義切換動畫 style
res/values/styles.xml
<style name="FeelyouWindowAnimTheme" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/in_from_left</item>
<item name="android:activityOpenExitAnimation">@anim/out_from_right</item>
<item name="android:activityCloseEnterAnimation">@anim/in_from_right</item>
<item name="android:activityCloseExitAnimation">@anim/out_from_left</item>
</style>
注意需要繼承自
@android:style/Animation.Activity
。具體這4個屬性什麼意思呢?假設我們有 2 個 Activity,分别是 A1 和 A2:
- 當我們從 A1 啟動 A2 時,A1 從螢幕上消失,這個動畫叫做
android:activityOpenExitAnimation
- 當我們從 A1 啟動 A2 時,A2 出現在螢幕上,這個動畫叫做
android:activityOpenEnterAnimation
- 當我們從 A2 退出回到 A1 時,A2 從螢幕上消失,這個叫做
android:activityCloseExitAnimation
- 當我們從 A2 退出回到 A1 時,A1 出現在螢幕上,這個叫做
android:activityCloseEnterAnimation
結合上面我講的情況,在腦海中想象一下,再結合屬性的名字,就很容易了解了!
定義具體動畫檔案
這裡的動畫可以是透明度、位移、縮放之類的任何動畫,我這裡以位移來舉例。當我們 A1 啟動 A2 時,我希望 A1 從右邊平移退出螢幕(out_from_right),A2 從左邊平移進入螢幕(in_from_left)。當我們從 A2 退出回到 A1 時,我希望 A2 從左邊平移退出螢幕(out_from_left),A1 從右邊平移進入螢幕(in_from_right)
下面我貼一下4個具體的動畫的 xml 檔案:
anim/out_from_right.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
author:Remex Huang
website:feelyou.info
-->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="100%p"
android:toYDelta="0" >
</translate>
anim/in_from_left.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
author:Remex Huang
website:feelyou.info
-->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="-100%p"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="0" >
</translate>
anim/out_from_left.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
author:Remex Huang
website:feelyou.info
-->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="-100%p"
android:toYDelta="0" >
</translate>
anim/in_from_right.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
author:Remex Huang
website:feelyou.info
-->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="100%p"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="0" >
</translate>
應用到對應 Activity
AndroidMenifest.xml
<activity
android:name="info.feelyou.demo.A1"
android:theme="@style/AnimActivityTheme" >
</activity>
<activity
android:name="info.feelyou.demo.A2"
android:theme="@style/AnimActivityTheme" >
</activity>
專注移動網際網路産品設計研發 分享最新的移動網際網路産品和技術