8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

過去に自分のブログに書いたものを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で実行すれば、インテントの内容でアニメーションを制御することもできるのでこちらでやるべきでしょう。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?