Android切換Activity的動畫效果

weixin_34208283發表於2017-06-26

實現click button切換兩個Activity

這個比較簡單,Android切換Activity需要使用Intent這個類

MainActivity

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button) this.findViewById(R.id.button1);

        button.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View view) {

                Intent intent = new Intent();

                intent.setClass(MainActivity.this,SecondActivity.class);

                startActivity(intent);

                MainActivity.this.finish();
            }
        });
    }
}

SecondActivity

public class SecondActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_main);

        Button button = (Button) findViewById(R.id.button2);
        button.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent();
                intent.setClass(SecondActivity.this,MainActivity.class);

                startActivity(intent);

                SecondActivity.this.finish();

            }
        });
    }
}

佈局檔案等就不寫了,隨便來兩個xml檔案就行,那麼這樣只是點選button後立馬切換介面,並沒有動畫效果。我們給它加一個左進右出,右進左出的效果。

增加動畫

Android已經內建了幾種動畫效果,可以見 android.R.anim 類。一般情況下我們需要自己定義螢幕切換的效果。首先我們先了解Activity的位置定義,如下圖:

6253588-28debc8de06aadfc.png
Paste_Image.png

  從上圖可以看出,以手機螢幕下面邊未X軸,螢幕左邊為Y軸,當Activity在X軸值為-100%p時,剛好在螢幕的左邊(位置1),當X軸值為0%p時,剛好再螢幕內(位置2),當X=100%p時剛好在螢幕右邊(位置3)。
  清楚了位置後,我們就可以實現左右滑動的切換效果,首先讓要退出的Activity從位置2移動到位置1,同時讓進入的Activity從位置3移動位置2,這樣就能實現從左右切換效果。
  實現過程如下,首先定義2個動畫,在 res目錄建立anim目錄, 然後在目錄建立動畫的xml檔案:out_to_left.xml (從左邊退出動畫) 、in_from_right.xml(從右邊進入動畫)

out_to_left.xml (從 位置2 移動到 位置1)

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

in_from_right.xml (從 位置3 移動到 位置2)

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

注: android:fromXDelta 動畫開始的位置, android:toXDelta 動畫結束的位置, android:duration動畫的時間。

那左進右出的情況跟這個類似。xml檔案配置好之後,怎麼才能在Activity中應用它們呢,這就用到了這個函式

<strong>public void overridePendingTransition (int enterAnim, int exitAnim)</strong>

其中:

enterAnim 定義Activity進入螢幕時的動畫
exitAnim 定義Activity退出螢幕時的動畫

overridePendingTransition 方法必須在startActivity()或者 finish()方法的後面。
比如右進左出:

overridePendingTransition(R.anim.in_from_right,R.anim.out_to_left);

該文章引用了兩篇博文,連結如下:
Android的Activity螢幕切換動畫(一)-左右滑動切換
兩個Activity切換例子

相關文章