過去に自分のブログに書いたものをQiitaにも転載。
アクティビティを遷移する際のアニメーションを変更する場合は、startActivity
の後にoverridePendingTransition
を呼ぶのが普通だと思いますが、インテントのフラグにFLAG_ACTIVITY_REORDER_TO_FRONTが設定されていると指定したアニメーションが適用されません。
Intent intent = new Intent(this, SampleActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
getActivity().overridePendingTransition(0, 0);
解決策はいつものようにStack Overflowで見つけましたが、備忘録として記録しておきます。
android - overridePendingTransition does not work when flag_activity_reorder_to_front is used - Stack Overflow
解決方法
FLAG_ACTIVITY_REORDER_TO_FRONTで既存のアクティビティを前面に移動させる場合には、呼び出された側のアクティビティのonNewIntent
でoverridePendingTransition
を実行する。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// FLAG_ACTIVITY_REORDER_TO_FRONTでActivityを起動した場合に
// 起動元のoverridePendingTransitionが有効に機能しないため
// インテントで起動時に呼び出すようにする
overridePendingTransition(R.anim.transition_to_right, R.anim.transition_to_left);
}
onResume
で実行しても同じ動きになるけど、onResume
はいろいろなタイミングで呼ばれるのでおすすめしないよとのこと。
onNewIntent
で実行すれば、インテントの内容でアニメーションを制御することもできるのでこちらでやるべきでしょう。