web-dev-qa-db-ja.com

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

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

私は位置を置き換えるために以下のコードを試しました

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

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

前もって感謝します。

85
Deepak Goel

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

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

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タイプをサポートせず、代わりに古いアニメーションフレームワークのみを実装するためです。

265
sciutand