Android Activity的切換動畫(overridePendingTransition)


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就沒什么實質性的東西了,就不貼出來了。

效果如下:

效果圖如下:

 

     源碼下載

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM