次の階層があるとします。
- レベル 1 のアクティビティ (メイン メニューなど)
- レベル 2 の活動 (カレンダーなど)
- レベル 3 の活動 (暦日など)
- レベル 2 の活動 (カレンダーなど)
次の使用例があります。
- 深いところへ行く
- 戻る
- 現在のアクティビティを画面に戻します (画面がオフになった後、またはアプリケーションが終了した後の実行中のバックグラウンド アクティビティから)
次の遷移動作が必要です。
ユース ケース 1 + 3: 古いアクティビティを左にスライドさせ、新しいアクティビティを右からスライドさせたい
使用例 2: 古いアクティビティを右にスライドさせ、新しいアクティビティを左からスライドさせたい
私はそれを達成するために非常に多くの方法を試しましoverridePendingTransition
たが、組み合わせが正しく機能しませんでした...次のようなもので行き詰まりました:
public class BaseActivity extends Activity
{
@Override
protected void onPause()
{
adjustWindowAnimation(this, false);
super.onPause();
}
@Override
protected void onResume()
{
adjustWindowAnimation(this, true);
super.onResume();
}
protected void adjustWindowAnimation(Activity parent, boolean start)
{
if (start)
parent.overridePendingTransition(R.anim.slide_from_right_in, R.anim.slide_to_left_out);
else
parent.overridePendingTransition(R.anim.slide_from_left_in, R.anim.slide_to_right_out);
}
// @Override
// protected void onCreate(Bundle savedInstanceState)
// {
// adjustWindowAnimation(this, true);
// super.onCreate(savedInstanceState);
// }
// @Override
// protected void onRestoreInstanceState(Bundle savedInstanceState)
// {
// adjustWindowAnimation(this, true);
// super.onRestoreInstanceState(savedInstanceState);
// }
// @Override
// protected void onStart()
// {
// super.onStart();
// adjustWindowAnimation(this, true);
// }
// @Override
// protected void onNewIntent(Intent intent)
// {
// adjustWindowAnimation(this, true);
// super.onNewIntent(intent);
// }
// @Override
// protected void onStop()
// {
// adjustWindowAnimation(this, false);
// super.onStop();
// }
// @Override
// public void finish()
// {
// adjustWindowAnimation(this, false);
// super.finish();
// }
// @Override
// protected void onDestroy()
// {
// Crouton.clearCroutonsForActivity(this);
// super.onDestroy();
// }
// @Override
// public void onBackPressed()
// {
// adjustWindowAnimation(this, false);
// super.onBackPressed();
// }
}
アニメーション (これらは正しく動作するはずです):
SlideFromLeftIn:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromXDelta="-100%" android:toXDelta="0"
android:duration="@android:integer/config_shortAnimTime" />
</set>
SlideFromRightIn:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromXDelta="100%" android:toXDelta="0"
android:duration="@android:integer/config_shortAnimTime" />
</set>
SlideToLeftOut:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromXDelta="0%" android:toXDelta="-100%"
android:duration="@android:integer/config_shortAnimTime" />
</set>
SlideToRightOut:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromXDelta="0" android:toXDelta="100%"
android:duration="@android:integer/config_shortAnimTime" />
</set>