Android學習(30)Activity切換
Activity左邊滑出,右邊滑入的動畫切換
大家都知道Android系統預設Activity間的動畫切換效果為:左邊滑出、右邊滑入。按返回鍵的動畫切換效果為:左邊滑入,右邊滑出。可是如今的手機制造商都定製自己的Rom。像MI UI和錘子OS等之類的手機。導致Android原生的切換動畫在不同的手機上發生了改變。有時候我們須要讓他變回原生的狀態。
這是我在網上盜的一張圖,它清晰的告訴我們Android的位移動畫的變換方式:
以下就是詳細的實現過程了:
寫動畫檔案
在 res資料夾建立anim資料夾, 然後在資料夾建立動畫的xml檔案:out_to_left.xml (從左邊退出動畫) 、in_from_right.xml(從右邊進入動畫)
out_to_right.xml(從右邊退出動畫)、in_from_left.xml(從左邊進入動畫)
in_from_left.xml
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:fromXDelta="-100%p" android:interpolator="@android:anim/accelerate_interpolator" android:toXDelta="0%p" > </translate>
in_from_right.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="100%p"
android:interpolator="@android:anim/accelerate_interpolator"
android:toXDelta="0%p" >
</translate>
out_to_left.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="0%p"
android:toXDelta="-100%p"
android:interpolator="@android:anim/accelerate_interpolator" >
</translate>
out_to_right.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="0%p"
android:toXDelta="100%p"
android:interpolator="@android:anim/accelerate_interpolator" >
</translate>
寫主題檔案 在values資料夾中開啟style.xml的檔案,在當中插入一個style節點,宣告一個主題。
<style name="Anim_fade" parent="android:Theme.NoTitleBar">
<item name="android:windowAnimationStyle">@style/fade</item>
</style>
能夠看到。以上主題的父主題是@android :style/Theme.NoTitleBar, 就是繼承自系統主題的大部分屬性。
當中有一個”android:windowAnimationStyle”屬性是由我們自己定義的,定位的位置相同在values資料夾下的style檔案裡。
<style name="fade" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/in_from_right</item>
<item name="android:activityOpenExitAnimation">@anim/out_to_left</item>
<item name="android:activityCloseEnterAnimation">@anim/in_from_left</item>
<item name="android:activityCloseExitAnimation">@anim/out_to_right</item>
</style>
以下重點介紹這當中的幾個屬性的含義,大家網上搜一下也是能夠的。我就直接將我所瞭解的說一下了:
如今如果有兩個Activity A 和 B,在A中能夠啟動B。同一時候,A和B的theme屬性均設定為上面定義的屬性。那麼,以上動畫的發生時機例如以下:
(1)當A啟動B時,A退出,B進入。A退出時的動畫名稱為android:activityOpenExitAnimation,動畫檔案為 R.anim.out_to_left;B進入時的動畫名稱為android:activityOpenEnterAnimation, 動畫檔案為R.anim.in_from_right。 (2)當B結束時,B退出,A進入。B退出的動畫名稱為android:activityCloseExitAnimation,動畫檔案為R.anim.out_to_rightA進入時的動畫名稱為android:activityCloseEnterAnimation,動畫檔案為R.anim.in_from_left。