前陣子遇到一個 Bug。一個 activity 的啟動動畫需要自定義為從屏幕底部升起。當時是這樣寫的:
startActivity(new Intent(this, SettingActivity_.class)); overridePendingTransition(R.anim.slide_in_from_bottom, 0);
之所以在 overridePendingTransition的第二個參數寫0,是以為在這里只需要設定啟動動畫。然而實測結果,是 activity在升起時,露出的背景是黑色的。這顯然錯誤。
修改方法是:
overridePendingTransition(R.anim.slide_in_from_bottom, R.anim.fake_anim);
一定要添加結束動畫,這里的 fake_anim 其實就是保持屏幕位置,什么動畫也不做。但是這能保證切換動畫背景的正確。
究其原因,就是因為 overridePendingTransition(int enterAnim, int exitAnim) 這個方法的第二個參數是設定即將結束的那個 activity 的結束動畫。如果設置為0,那么它會直接不可見,即變成黑色,造成錯誤。
這個問題其實還有一個解決方法,就是設置 activity 的主題,在主題中設置 windowBackground 為透明。但這會在該 activity 啟動新 activity 時,出現背景透明的錯誤。
