FLAG_ACTIVITY_REORDER_TO_FRONTで画面遷移するときのアニメーションを変更する

  • 7
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

過去に自分のブログに書いたものを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で既存のアクティビティを前面に移動させる場合には、呼び出された側のアクティビティのonNewIntentoverridePendingTransitionを実行する。

@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で実行すれば、インテントの内容でアニメーションを制御することもできるのでこちらでやるべきでしょう。