1. 程式人生 > >Android學習(30)Activity切換

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。