1. ホーム
  2. android

[解決済み] アニメーションでアクティビティ内のフラグメントをスワップする

2023-01-05 11:37:23

質問

ページAはフラグメントAのためのもので、画面の左側にあり、ページBはフラグメントBのため、すなわち画面の右側にあるとします。今私は、私がページA上のボタンをクリックすると、ページAはいくつかの遷移アニメーションで画面の右側に移動するようにしたい。

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

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

何か手がかりを探す。

よろしくお願いします。

どのように解決するのですか?

古い質問で、おそらくすでに解決していると思いますが、今後の参考のために。

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

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