3

ボタンをクリックすると、アクティビティから右から左にスライドしてフラグメントを表示する必要があるシナリオがあります。同様に、フラグメントを押し戻すと、フラグメントが右にスライドして戻り、以前のアクティビティが表示されますフラグメントが追加されました。

今私の問題は、フラグメント自体へのアニメーションが機能することですが、フラグメントが右からスライドインしている間に左にスライドしてアクティビティをアニメーション化する必要があります。

これを行うために overridePendingTransition メソッドを使用してみました:

overridePendingTransition(R.anim.push_in_from_left, R.anim.push_out_to_left);

onResume、onPauseなどのアクティビティで利用可能なメソッドに保留中の遷移を入れようとしましたが、うまくいきませんでした。以下は私が使用しているコードです:

overridePendingTransition(R.anim.push_in_from_left, R.anim.push_out_to_left); 
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.pull_in_from_left, R.anim.push_out_to_left, R.anim.pull_in_from_left, R.anim.push_out_to_left);
transaction.add(R.id.events_holder, myFragment);
transaction.addToBackStack("myFragment");
transaction.commit();

フラグメントトランザクションの処理を開始する前に、保留中のトランジションをボタンのクリックでも実行しようとしましたが、どちらも機能しませんでした。

誰かがこの問題の解決策を提案できれば、本当に役に立ちます。

4

1 に答える 1

1

アニメーションをオーバーライドすることはありません。正しく行っている場合、フラグメントをスライドしてもアクティビティのレイアウトが移動することはありません。代わりに、アクティビティを含むレイアウトに xml で定義できるアニメーションを適用する必要があります。本質的には、アクティビティがスライドアウトし、フラグメントがスライドインする外観を与えます。作成するターゲットによっては、アニメーションを適用した後に実際に移動する必要がある場合があります (この場合、アニメーションを適用しても物理的な場所は実際には変わりません)。レイアウトの場合、指定した場所に単純にレンダリングされます。) フラグメントを含むレイアウト。アクティビティを含むレイアウトを物理的に移動する必要はありません。フラグメントの最下層のレイアウトに空の onclick リスナーを指定すると、クリックが失敗しないためです。完了したら、別の xml アニメーション ファイルを使用して、フラグメントとアクティビティ レイアウトを元の状態に戻し (逆のアニメーション)、フラグメントを物理的に元に戻します。そうしないと、オン クリック イベントがすべて受信されます。(新しい SDK をターゲットにしている場合、この問題は修正されていると思います)

アニメーションxmlは次のようになります

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="300"/>
</set>
于 2012-12-04T08:51:11.843 に答える