目的: Android中不同Activity之間的切換是不可避免的事情,那么怎么才能讓Activity的切換更優(yōu)雅呢,Android中提供了overridePendingTransition(A,B)方法來解決這個(gè)問題。
效果: 用兩張圖來表示該函數(shù)能實(shí)現(xiàn)的效果


效果一:舊的Activity從左側(cè)出去,新的Activity從右側(cè)出來。
效果二:舊的Activity從右側(cè)出去,新的Activity從左側(cè)出來。
先說一下overridePendingTransition(A,B)兩個(gè)參數(shù)的意思。
startActivity(new Intent(this, OtherActivity.class));
/**
* R.anim.slide_in_right:新的Activity進(jìn)入時(shí)的動(dòng)畫,這里是指OtherActivity進(jìn)入時(shí)的動(dòng)畫
* R.anim.slide_out_left:舊的Activity出去時(shí)的動(dòng)畫,這里是指this進(jìn)入時(shí)的動(dòng)畫
*/
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
這里需要特別說明的是,關(guān)于overridePendingTransition這個(gè)函數(shù),有兩點(diǎn)需要注意
1、它必需緊挨著 startActivity() 或者 finish() 函數(shù)之后調(diào)用
2、它只在 android 2.0 以及以上版本上適用
我們來實(shí)現(xiàn)一個(gè)效果:新的Activity從右側(cè)滑動(dòng)出來,就像是上圖中點(diǎn)擊第一個(gè)button劃出第二個(gè)界面一樣。
Android做了一個(gè)約定,約定整個(gè)窗口的最左側(cè)的x軸坐標(biāo)是0,最右側(cè)的x軸坐標(biāo)是100%p,如圖:

舊的Activity實(shí)際上是x軸坐標(biāo)發(fā)生了變化:0—>-100%p
新的Activity實(shí)際上是x軸坐標(biāo)發(fā)生了變化:100%p—>0
四個(gè)效果的實(shí)現(xiàn):第一個(gè)和第二個(gè)、第三個(gè)和第四個(gè)分別配合使用
第一個(gè):slide_in_right:從右邊劃進(jìn)來:100%p—>0
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromXDelta="100%p"
android:toXDelta="0"/>
</set>
第二個(gè):slide_out_left:從左邊劃出去:0—>-100%p
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromXDelta="0"
android:toXDelta="-100%p"/>
</set>
第三個(gè):slide_in_left:從左邊劃進(jìn)來:-100%p—>0
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromXDelta="-100%p"
android:toXDelta="0"/>
</set>
第四個(gè):slide_out_right:從右邊劃出去:0—>100%p
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromXDelta="0"
android:toXDelta="100%p"/>
</set>