Android中Activity的切換動畫(非overridePendingTransition)

摘自: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

Xml代碼  收藏代碼xml

  1. <style name="Activity.Theme" mce_bogus="1" parent="@android :style/Theme.NoTitleBar">  blog

  2.     <item name="android:windowAnimationStyle">@style/anim_activity</item>  繼承

  3. </style>  utf-8

 能夠看到,以上主題的父主題是@android :style/Theme.NoTitleBar, 就是繼承自系統主題的大部分屬性。get

其中有一個"android:windowAnimationStyle"屬性是由咱們自定義的,定位的位置一樣在R.values.style文件中。代碼以下:

Xml代碼  收藏代碼

  1. <style name="anim_activity" mce_bogus="1" parent="@android :style/Animation.Activity">  

  2.     <item name="android:activityOpenEnterAnimation">@anim/activity_open_in_anim</item>  

  3.     <item name="android:activityOpenExitAnimation">@anim/activity_open_out_anim</item>  

  4.     <item name="android:activityCloseEnterAnimation">@anim/activity_close_in_anim</item>  

  5.     <item name="android:activityCloseExitAnimation">@anim/activity_close_out_anim</item>  

  6. </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代碼  收藏代碼

  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >  

  3.   

  4.     <translate  

  5.         android:duration="400"  

  6.         android:fromXDelta="-100%p"  

  7.         android:fromYDelta="0"  

  8.         android:interpolator="@android :anim/decelerate_interpolator"  

  9.         android:toXDelta="0"  

  10.         android:toYDelta="0" />  

  11.   

  12. </set>  

 R.anim.activity_close_out_anim.xml

Xml代碼  收藏代碼

  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >  

  3.     <translate  

  4.         android:duration="400"  

  5.         android:fromXDelta="0"  

  6.         android:fromYDelta="0"  

  7.         android:interpolator="@android :anim/decelerate_interpolator"  

  8.         android:toXDelta="100%p"  

  9.         android:toYDelta="0" />  

  10. </set>  

 R.anim.activity_open_in_anim.xml

Xml代碼  收藏代碼

  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >  

  3.   

  4.     <translate  

  5.         android:duration="400"  

  6.         android:fromXDelta="100%p"  

  7.         android:fromYDelta="0"  

  8.         android:interpolator="@android :anim/decelerate_interpolator"  

  9.         android:toXDelta="0"  

  10.         android:toYDelta="0" />  

  11.   

  12. </set>  

 R.anim.activity_open_out_anim.xml

Xml代碼  收藏代碼

  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >  

  3.   

  4.     <translate  

  5.         android:duration="400"  

  6.         android:fromXDelta="0"  

  7.         android:fromYDelta="0"  

  8.         android:interpolator="@android :anim/decelerate_interpolator"  

  9.         android:toXDelta="-100%p"  

  10.         android:toYDelta="0" />  

  11.   

  12. </set>  

相關文章
相關標籤/搜索