フラグメントとバックスタックをアニメーション化します
-
26-10-2019 - |
質問
バックスタックからフラグメントトランザクションをポップする方法を使用したり理解したりするのに苦労しています。具体的には、「アウト」アニメーションを呼び出すことを期待していますが、そうではないようです。
フラグメントを追加し、フェードイン/フェードアウトするようにカスタムトランジションを適用するフラグメントトランザクション(フラグメントトランザクション)を処理する簡単な方法があります。また、これをバックスタックに追加して、ユーザーがバックボタンでそのトランザクションを元に戻すことができるようにし、基本的にフラグメントが追加される前に状態に移動することができます。
protected void changeFragment() {
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
ft.add(R.id.fragment_container, new TestFragment());
ft.addToBackStack(null);
ft.commit();
}
すべてが前進するのにうまく機能しますが、ユーザーが戻るボタンをクリックすると、トランジションアニメーションは逆になりません。私が期待していたのは、フラグメントが削除されたとき、フェードアウトアニメーションを使用することでした。代わりに、それは(アニメーションなしで)飛び出しているように見えます。その後、コンテナはフェードインしているようです。これがまさに何が起こっているのかはわかりませんが、フラグメントは間違いなく消えていません。
私のアプリケーションでは、互換性ライブラリを使用してフラグメントサポートを追加しますが、これはハニカム(Android-11)にも適用できると仮定します。私がここで何か間違ったことをしているのか、それとも私があまりにも多くのことを期待しているのかを知っている人はいますか?理想的には、メッセージをクリックしてバックボタンを使用して戻って前進することに関して、Gmail(Xoomで)がどのように行うかと同様にフラグメントをアニメーション化したいと思います。バックボタンの機能をオーバーライドして自分のフラグメント状態に追いつく必要はありません。なぜなら、私はバックアウトしたいと思う「トランザクション」をいくつか持っている可能性があり、ホイールの再発明のファンではないからです。
また、Android開発者グループについても尋ねられています。 http://groups.google.com/group/android-developers/browse_thread/thread/1136a3a70fa0b6e9
解決
バグは3.2リリースで修正され、次の新しいAPIが追加されました。
互換性ライブラリにまだバックポートされていないことに注意してください(バグレポートで言及されているように)。
他のヒント
私はこれを使用します:
ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out);
また、遷移は、戻るボタンが押されたときに逆に機能します。
それはバグです、見てください バグレポート15623. 。 Androidプロジェクトメンバーの1人は、修正はリリース3.1には遅すぎるとコメントしましたが、次のリリースにする必要があります。
同じメンバーがそれを続けています...
問題は、同じアニメーションが現在の場所にフラグメントを置くために実行されたポップ操作で実行されることです。たとえば、上記のスライディング例では、前方操作(古いフラグメントをスタックに押し込み、新しいフラグメントを表示)に移動すると、古いフラグメントを中心から左にスライドさせ、新しいフラグメントをスライドさせます。センターの右。スタックがポップされると、これらの同じアニメーションが実行されます。最新のフラグメントは、右から中央にスライドすることで「アニメーション化されています」(その後、削除されているため、消えます)。古いフラグメントはスタックから飛び出し、画面からすぐに左の中心からアニメーション化されます。