Enter/Exit アニメーションと popEnter/popExit アニメーションの違いは何ですか? 質問する

Enter/Exit アニメーションと popEnter/popExit アニメーションの違いは何ですか? 質問する

アニメーションにはsetCustomAnimations()4 つのリソース ID が必要です。よくわかりません。もっと明確なイメージをお持ちの方がいらっしゃいましたら、説明していただけるとありがたいです。

フラグメント A にプレースホルダーとバックスタックを追加するとします。

FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.holder, fragA, FragmentA.FRAGMENT_NAME);
        ft.addToBackStack(FragmentA.FRAGMENT_NAME);
        ft.setCustomAnimations(R.anim.slide_in_from_bottom, R.anim.slide_in_from_top, R.anim.slide_in_from_left, R.anim.slide_in_from_right);
        ft.show(frag);
        ft.commit();

フラグメント B に置き換えます。

FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.holder, fragB, FragmentB.FRAGMENT_NAME);
        ft.addToBackStack(FragmentB.FRAGMENT_NAME);
        ft.setCustomAnimations(R.anim.slide_in_from_bottom, R.anim.slide_in_from_top, R.anim.slide_in_from_left, R.anim.slide_in_from_right);
        ft.show(frag);
        ft.commit();

次回popstack()を実行する場合

fm.popBackStackImmediate(FragmentB.FRAGMENT_NAME,
                                FragmentManager.POP_BACK_STACK_INCLUSIVE);

どのトランザクションのアニメーションから実行されますか?

/**
 * Set specific animation resources to run for the fragments that are
 * entering and exiting in this transaction. The <code>popEnter</code>
 * and <code>popExit</code> animations will be played for enter/exit
 * operations specifically when popping the back stack.
 */
public abstract FragmentTransaction setCustomAnimations(@AnimRes int enter,
        @AnimRes int exit, @AnimRes int popEnter, @AnimRes int popExit);

ベストアンサー1

簡単なケースから始めましょう:

フラグメントAをフラグメントB(2番目のコードスニペット)に置き換えます。

  • フラグメントBの実行入力アニメーション
  • フラグメントAは出口アニメーション

戻るボタンを押して置換操作を元に戻します

  • フラグメントBの実行ポップ終了アニメーション
  • フラグメントAはポップエンターアニメーション

さて、あなたの質問にお答えします。

コンテナにすでにフラグメントがあるかどうかはわかりません。両方のケースを考えてみましょう。

  1. フラグメント A に置き換える最初の操作が呼び出されたとき、コンテナーにはすでにフラグメント (フラグメント 0 と呼びます) がありました。スタック全体をポップすると、次のようになります。

    • フラグメントBの実行ポップ終了アニメーション(2 番目のスニペットで設定)
    • フラグメント0の実行ポップエンターアニメーション(最初のスニペットで設定)
  2. コンテナは空だったので、フラグメント A に置き換えることは基本的に追加操作でした。スタック全体をポップする場合:

    • フラグメントBの実行ポップ終了アニメーション(2 番目のスニペットで設定)
    • コンテナが空になったため、popEnterアニメーションは実行されません。

おすすめ記事