在之前的一篇部落格裡介紹過activity間動畫跳轉的問題,但是真正做軟體發現並不能滿足我們的要求,因為使用overridePendingTransition(int enterAnim, intexitAnim)這個函數只能實現進入另一個activity的動畫,當另一個activity退出時,還是使用的系統動畫。所以在這裡講一下怎麼設定所有activity的動畫跳轉和退出跳轉。其實有些軟體已經這樣做了,比如我們都比較熟悉的福士點評網。
下面我們通過一個執行個體來看一下怎麼實現所有activity動畫跳轉,這裡我們不妨就模仿下福士點評網activity的動畫跳轉。
首先在layout/anim建立 anim_enter.xml
<?xml version="1.0" encoding="UTF-8"?><set android:interpolator="@android:anim/decelerate_interpolator" xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:duration="@android:integer/config_mediumAnimTime" android:pivotX="69.99999%" android:pivotY="100.0%" android:fromXScale="0.0" android:toXScale="1.0" android:fromYScale="0.0" android:toYScale="1.0" /> <alpha android:duration="@android:integer/config_mediumAnimTime" android:fromAlpha="0.0" android:toAlpha="1.0" /></set>
anim_exit.xml
<?xml version="1.0" encoding="UTF-8"?><set android:interpolator="@android:anim/accelerate_interpolator" xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:duration="@android:integer/config_mediumAnimTime" android:pivotX="69.99999%" android:pivotY="100.0%" android:fromXScale="1.0" android:toXScale="0.0" android:fromYScale="1.0" android:toYScale="0.0" /> <alpha android:duration="@android:integer/config_mediumAnimTime" android:fromAlpha="1.0" android:toAlpha="0.0" /></set>
上面的兩個xml分別對應overridePendingTransition(int enterAnim, int exitAnim) 中的進入和退齣動畫
接下來定義當另一個activity退出時的動畫效果,back_enter.xml
<?xml version="1.0" encoding="UTF-8"?><set android:interpolator="@android:anim/decelerate_interpolator" xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:duration="@android:integer/config_mediumAnimTime" android:pivotX="50.0%" android:pivotY="50.0%" android:fromXScale="1.5" android:toXScale="1.0" android:fromYScale="1.5" android:toYScale="1.0" /> <alpha android:duration="@android:integer/config_mediumAnimTime" android:fromAlpha="0.4" android:toAlpha="1.0" /></set>
back_exit.xml
<?xml version="1.0" encoding="UTF-8"?><set android:interpolator="@android:anim/decelerate_interpolator" xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:duration="@android:integer/config_mediumAnimTime" android:pivotX="50.0%" android:pivotY="50.0%" android:fromXScale="1.0" android:toXScale="0.4" android:fromYScale="1.0" android:toYScale="0.4" /> <alpha android:duration="@android:integer/config_mediumAnimTime" android:fromAlpha="1.0" android:toAlpha="0.0" /></set>
進入和離開動畫效果我們已經定義好了,接下來需要定義樣式,以前我們設定動畫效果都是寫在activity中,只是對單個activity定義動畫。現在我們對所有的activity定義動畫效果,我們不妨設想一下應該定義一個樣式,在所有包裹activity的地方引入樣式。這樣我們就想到了AndroidManifest.xml裡的application 了,他裡面生命所有的activity,明白了這些就好辦了。
接下來我們需要在String.xml聲明動畫的樣式
<style name="ThemeActivity" mce_bogus="1"><item name="android:windowAnimationStyle">@style/AnimationActivity</item><item name="android:windowNoTitle">true</item></style> <style name="AnimationActivity" parent="@android:style/Animation.Activity" mce_bogus="1"><item name="android:activityOpenEnterAnimation">@anim/anim_enter</item><item name="android:activityOpenExitAnimation">@anim/anim_exit</item><item name="android:activityCloseEnterAnimation">@anim/back_enter</item><item name="android:activityCloseExitAnimation">@anim/back_exit</item></style>
然後在 AndroidManifest.xml裡聲明樣式
<application android:icon="@drawable/ic_launcher" android:theme="@style/ThemeActivity" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".GlobalAnimationActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".OtherActivity"></activity> </application>
OK,這樣就實現了福士點評網activity的動畫跳轉,大家自己體驗下吧。
最近公司項目確實是比較忙,部落格裡有些朋友留言需要原始碼,也沒有一一發,我把大部分都已經上傳到群共用裡了,麻煩大家自己下載吧!