Activityのアニメーションの制御

ひとつのActivityから複数のActivityを順番に呼び出すとき。

  1. A から B を呼び出す
  2. B が結果を返す
  3. A から C を呼び出す
  4. C でBACKが押された
  5. A から B を再び呼び出す

今作ってるアプリで、5 番目の画面遷移が Close ではなく Open のアニメーションになってしまい(戻る操作なのに進むアニメーションになってしまう)、すごく違和感があって気になっていたんだけど、回避方法があるんですな。

Android 2.1 から利用可能。

こんな感じで使ってみた。

static void setActivityAnimation(Activity activity, boolean forward) {
    if (!forward) {
        Theme theme = activity.getTheme();

        TypedValue tv = new TypedValue();
        theme.resolveAttribute(android.R.attr.windowAnimationStyle, tv, true);

        TypedArray ta = theme.obtainStyledAttributes(tv.resourceId, new int [] {
            android.R.attr.activityCloseEnterAnimation,
            android.R.attr.activityCloseExitAnimation,
        });
        int enterAnim = ta.getResourceId(0, 0);
        int exitAnim = ta.getResourceId(1, 0);
        ta.recycle();

        activity.overridePendingTransition(enterAnim, exitAnim);
    }
}

1つ前の画面を呼び出すときに、戻ってるアニメーションになり違和感が無くなった。