簡介
一般 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, );
結果:
可以看到,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>
結果:
SecondActivity.java 退出動畫:
@Override
public void finish() {
super.finish();
overridePendingTransition(, R.anim.anim_out);
}