0

次の階層があるとします。

  • レベル 1 のアクティビティ (メイン メニューなど)
    • レベル 2 の活動 (カレンダーなど)
      • レベル 3 の活動 (暦日など)

次の使用例があります。

  1. 深いところへ行く
  2. 戻る
  3. 現在のアクティビティを画面に戻します (画面がオフになった後、またはアプリケーションが終了した後の実行中のバックグラウンド アクティビティから)

次の遷移動作が必要です。

ユース ケース 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>
4

1 に答える 1