android之Activity的切換動畫(進出動畫)

一般情況下,如果我們不設置Activity的切換動畫,默認的是淡入淡出。但是我們看到很多App都是左右切換的動畫效果看着比淡入淡出效果要好看,那麼它們是如何實現的呢,其實很簡單,就寫幾個動畫的xml文件就可以了,但是寫動畫的xml前需要了解Activity的進出機制,我下面畫個圖進行說明,這是Android系統屏幕的座標系分佈方式:


假設A就是我們的手機,切換的時候動畫的座標都是以手機的左上角來移動的,現在來一一說明,假設我們此時顯示的Activity稱爲start,需要跳轉到Activity稱爲end

如果我們想跳轉的時候end從右邊進來(同時start從左邊出去),一切都只看x軸,因爲我們左右切換的時候與Y軸無關,所以只看x座標。

●那麼end就是從上圖C位置到A位置即從100%p到0%p,即從屏幕右邊平移進來,建立其對應的動畫xml文件名爲in_from_right,動畫代碼就是:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/decelerate_interpolator" >
    <translate 
        android:fromXDelta="100%p" 
        android:toXDelta="0%p"
        android:duration="300" />
</set>

translate不用說了吧,代表平移動畫,fromXDelta代表x方向的初始位置,我們是從100%p到0%p,所以初始位置是100%p,toXDelta代表結束位置即0%p,duration代表動畫的持續時間0.3s

●那麼start從A位置到B位置即從0%p到-100%p,即從屏幕左邊平移出去,建立其對應的動畫xml文件名爲out_to_left,動畫代碼就是:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/decelerate_interpolator" >
    <translate 
        android:fromXDelta="0%p" 
        android:toXDelta="-100%p"
        android:duration="300" />
</set>
代碼不用解釋了吧,跟前面代碼的道理一樣

那麼豎直方向的,比如end從下面進來的同時start從上面出去,道理也是一樣的,只是將fromXDelta和toXDelta換成fromYDelta和toYDelta。


如果想跳轉的時候end從右邊進來,start不動,那麼實現方式又不一樣了。

●那麼end的方式方法不變,同上

●那麼start的方式就是不動,就是從A到A,所以就是從0%p到0%p,所以代碼x方向切換時停止的代碼就是:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/decelerate_interpolator" >
    <translate 
        android:fromXDelta="0%p" 
        android:toXDelta="0%p"
        android:duration="300" />
</set>

x和y方向上的做法都是一樣的,這些會了,那各種切換方式就出來了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章