天天看點

Activity overridePendingTransition 切換動畫

簡介

一般 Activity 需要設定切換動畫時,我們會使用:

1. 在 Activity 的 theme 中設定

<item name="android:activityOpenEnterAnimation">@anim/act_switch_fade_in</item>
<item name="android:activityOpenExitAnimation">@anim/act_switch_no_anim</item>
<item name="android:activityCloseEnterAnimation">@anim/act_switch_no_anim</item>
<item name="android:activityCloseExitAnimation">@anim/act_switch_fade_out</item>
           

2.在 Actvity startActivity() 或 finish() 之後調用 overridePendingTransition()

startActivity(new Intent(MainActivity.this, SecondActivity.class));
overridePendingTransition(R.anim.anim_in, R.anim.anim_keep_normal);
           

案例分析

overridePendingTransition(R.anim.anim_in, R.anim.anim_keep_normal);

參數說明:

第一個參數:新 Activity 進入的動畫(下面案例中 SecondActivity 進入動畫);

第二個參數:舊 Activity 退出的動畫(下面案例中 MainActivity 退出動畫);

res/anim/anim_in.xml (進入動畫)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="400">

    <rotate
        android:fromDegrees="45"
        android:pivotX="50%p"
        android:pivotY="180%p"
        android:toDegrees="0" />
</set>
           

res/anim/anim_out.xml (退出動畫)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="400">
    <rotate
        android:fromDegrees="0"
        android:pivotX="50%p"
        android:pivotY="180%p"
        android:toDegrees="45" />
</set>
           

MainActivity.java

startActivity(new Intent(MainActivity.this, SecondActivity.class));
overridePendingTransition(R.anim.anim_in, );
           

結果:

Activity overridePendingTransition 切換動畫

可以看到,SecondActivity 進入動畫是 OK 的,但是 MainActivity 退出動畫有問題,而不是我們代碼中設定的無動畫(0 表示無動畫)。

解決辦法: 将其設定為沒有動畫效果的 anim,而不是設定為 0,我這裡設定為:

/res/anim/anim_no_effect.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="400">
    <alpha
        android:fromAlpha="1"
        android:toAlpha="1" />
</set>
           

結果:

Activity overridePendingTransition 切換動畫

SecondActivity.java 退出動畫:

@Override
    public void finish() {
        super.finish();
        overridePendingTransition(, R.anim.anim_out);
    }