轉載:http://ming-fanglin.iteye.com/blog/1396473
原來使用Activity.overridePendingTransition來自訂Activity的進入動畫,卻發現沒法定義退出的動畫。結果就發現了強大的Theme和Style,之後還需要好好研究一下。
具體是這樣子的:
在AndroidManifest裡面,對於application和activity標籤可以定義theme屬性。如果對Application定義了某一個屬性,那麼會對所有的activity產生影響,當然你可以在activity中覆蓋它。
<application android:theme="@style/ThemeActivity">
然後在values/themes.xml中
Java代碼
- <style name="ThemeActivity" mce_bogus="1">
-
- <item name="android:windowAnimationStyle">@style/AnimationActivity</item>
-
- <item name="android:windowNoTitle">true</item>
-
- </style>
<style name="ThemeActivity" mce_bogus="1"> <item name="android:windowAnimationStyle">@style/AnimationActivity</item> <item name="android:windowNoTitle">true</item> </style>
在values/styles.xml中
Java代碼
- <style name="AnimationActivity" parent="@android:style/Animation.Activity" mce_bogus="1">
-
- <item name="android:activityOpenEnterAnimation">@anim/push_left_in</item>
-
- <item name="android:activityOpenExitAnimation">@anim/push_left_out</item>
-
- <item name="android:activityCloseEnterAnimation">@anim/push_right_in</item>
-
- <item name="android:activityCloseExitAnimation">@anim/push_right_out</item>
-
- </style>
<style name="AnimationActivity" parent="@android:style/Animation.Activity" mce_bogus="1"> <item name="android:activityOpenEnterAnimation">@anim/push_left_in</item> <item name="android:activityOpenExitAnimation">@anim/push_left_out</item> <item name="android:activityCloseEnterAnimation">@anim/push_right_in</item> <item name="android:activityCloseExitAnimation">@anim/push_right_out</item> </style>
這樣就可以了,至於anim中的動畫,就自己定義啦,這個和普通的animation是一樣的,如果不知道的話,請參見
http://developer.android.com/guide/topics/graphics/view-animation.html。
這種方式除了可以定義activity的animation之外,還有task,window出現和結束時候的動畫,具體請參見
http://developer.android.com/reference/android/R.styleable.html#WindowAnimation
本人不明白的 mce_bogus="1" 是什麼意思,去掉了也沒有影響
附普通轉場效果動畫:
Activity的切換動畫指的是從一個activity跳轉到另外一個activity時的動畫。
它包括兩個部分:
一部分是第一個activity退出時的動畫;
另外一部分時第二個activity進入時的動畫;
在Android的2.0版本之後,有了一個函數來幫我們實現這個動畫。這個函數就是
overridePendingTransition
這個函數有兩個參數,第一個參數是第二個activity進入時的動畫,第二個參數是第一個activity退出時的動畫。
這裡需要特別說明的是,關於overridePendingTransition這個函數,有兩點需要主意:
1.它必需緊挨著startActivity()或者finish()函數之後調用
2.它只在android2.0以及以上版本上適用
下面舉個例子
overridePendingTransition(R.anim.push_left_in,R.anim.push_left_out);
R.anim.push_left_in,第二一個activity進入時動畫
push_left_in這個xml檔案,放在res/anim目錄下
代碼如下:
Java代碼
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android">
- <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="300"/>
- <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
- </set>
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="300"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" /></set>
R.anim.push_left_out,第一個activity出去時動畫
代碼如下:
Java代碼
- <set xmlns:android="http://schemas.android.com/apk/res/android">
- <translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="300"/>
- <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
- </set>
<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="300"/> <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" /></set>