アニメーションを介してアクティビティのフラグメントを交換する


94

アニメーションを介してアクティビティの2つのフラグメントを交換したいと思います。Pag​​eAがフラグメントAと画面の左側にあり、PageBがフラグメントB、つまり画面の右側にあるとします。ここで、pageAのボタンをクリックすると、PageAが画面の右側に移動し、遷移アニメーションが表示されます。

以下のコードを試して位置を入れ替えました

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, new FragB());
fragmentTransaction.commit();

手がかりを探しています。

前もって感謝します。


回答:


282

古い質問とあなたはおそらくすでにそれを理解しましたが、将来の参考のために:

コードを使用してフラグメントを置き換えるときにカスタムアニメーションを設定するために使用するものは次のとおりです。

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
ft.replace(R.id.fragment_container, newFragment, "fragment");
// Start the animated transition.
ft.commit();

以下は、slide_in_leftアニメーションの例です。

<?xml version="1.0" encoding="utf-8"?>
<set>
  <translate xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromXDelta="-100%"
   android:toXDelta="0"
   android:interpolator="@android:anim/decelerate_interpolator"
   android:duration="500"/>
</set>

互換性ライブラリを使用している場合、これはアニメーションであることに注意してください。代わりに、FragmentManagerのネイティブサポートを備えたSDKを使用している場合、アニメーションは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<set>
  <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="x" 
    android:valueType="floatType"
    android:valueFrom="-1280"
    android:valueTo="0" 
    android:duration="500"/>
</set>

これは、互換性ライブラリが新しいobjectAnimatorタイプをサポートせず、代わりに古いアニメーションフレームワークのみを実装するためです。


92
これは間違いなく正しい答えです。順序が重要であることに注意してください!追加/置換の呼び出しの前にsetCustomAnimations()を呼び出す必要があります!
theelfismike 2013

2
それで、あなたが最高のコンプをしたいなら、あなたはどのアプローチを使うべきですか?
K-SOの毒性が高まっています。

17
これらの異なるアニメーションは完全に同じではありません。valueFromに-1280を使用して、フラグメントの幅が1280に等しいと想定しています。幅がそれより大きいと、画面から完全に外れることはありません。
egfconnor 2013年

51
Uは代わりにandroid名前空間の事前定義されたアニメーションを使用できます。transaction.setCustomAnimations(android.R.anim.slide_in_left、android.R.anim.slide_out_right);
ジョーディ2014年

2
事前定義されたアニメーションは「translate」タグに依存しているため、ランタイム例外FWIWをトリガーします。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.