overridePendingTransition
1.平時Activity的切換是就是從中間彈出來,然后遮蓋住之前的Activity。這種效果看到很多后就想給他換成其他的效果,如:
要顯示的Acitvity從左邊往右的平移進入,被遮蓋的Activity從左往右的平移划出。
在Android開發過程中,經常會碰到Activity之間的切換效果的問題,下面介紹一下如何實現左右滑動的切換效果,首先了解一下Activity切換的實現,從Android2.0開始在Activity增加了一個方法:
public void overridePendingTransition (int enterAnim, int exitAnim)
其中:
enterAnim 定義Activity進入屏幕時的動畫(要顯示的Activity進入時的動畫)
exitAnim 定義Activity退出屏幕時的動畫(被遮蓋住的Activity划出時的動畫)
overridePendingTransition 方法必須在startActivity()或者 finish()方法的后面。
Android已經內置了幾種動畫效果,可以見 android.R.anim 類。一般情況下我們需要自己定義屏幕切換的效果。首先我們先了解Activity的位置定義,如下圖:
從上圖可以看出,以手機屏幕下面邊未X軸,屏幕左邊為Y軸,當Activity在X軸值為-100%p時,剛好在屏幕的左邊(位置1),當X軸值為0%p時,剛好再屏幕內(位置2),當X=100%p時剛好在屏幕右邊(位置3)。
在用overridePendingTransition可能會遇到動畫效果不產生,解決辦法如下:
1、android系統版本2.0以下,這個沒辦法,想其他辦法解決切換動畫吧。
2、在ActivityGroup等的嵌入式Activity中,這個比較容易解決,用如下方法就可以了:
this.getParent().overridePendingTransition 就可以解決。
3、在一個Activity的內部類中,或者匿名類中,這時候只好用handler來解決了。
4、手機的顯示動畫效果被人為或者其他方式給關閉了 現在打開即可 設置->顯示->顯示動畫效果
2.直接上代碼
要顯示的Activity進入時的動畫:
1 <?xml version="1.0" encoding="utf-8"?> 2 <set xmlns:android="http://schemas.android.com/apk/res/android" > 3 <translate 4 android:duration="300" 5 android:fromXDelta="-100%" 6 android:toXDelta="0%p" /> 7 8 </set>
要被遮蓋住的Activity滑出時的動畫:
1 <?xml version="1.0" encoding="utf-8"?> 2 <set xmlns:android="http://schemas.android.com/apk/res/android" > 3 <translate 4 android:duration="300" 5 android:fromXDelta="0%" 6 android:toXDelta="100%p" /> 7 8 </set>
MainActivity:
1 public class MainActivity extends Activity { 2 3 private Button btn; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 btn = (Button) findViewById(R.id.btn); 10 btn.setOnClickListener(new OnClickListener() { 11 12 @Override 13 public void onClick(View v) { 14 Intent i = new Intent(); 15 i.setClass(MainActivity.this, SecondActivity.class); 16 startActivity(i); 17 overridePendingTransition(R.anim.in_from_right, R.anim.out_left); 18 } 19 }); 20 } 21 22 }
還有的Activity就沒什么實質性的東西了,就不貼出來了。
效果如下:
效果圖如下: