FragmentTransaction.setCustomAnimationsを使用して次の効果を達成しようとしています。
- フラグメントAが表示されています
- フラグメントAをフラグメントBに置き換えます。フラグメントAは、交換中も表示されたままになります。フラグメントBは右からスライドインするはずです。フラグメントBは、フラグメントAの上部にスライドする必要があります。
アニメーション設定でスライドを取得するのに問題はありません。私の問題は、アニメーションのスライドが実行されている間、フラグメントAをそのままにして、フラグメントBの下に置く方法がわからないことです。私が何をしても、フラグメントAが一番上にあるようです。
どうすればこれを達成できますか?
FragmentTransactionコードは次のとおりです。
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_right, R.anim.nothing, R.anim.nothing,
R.anim.slide_out_right);
ft.replace(R.id.fragment_content, fragment, name);
ft.addToBackStack(name);
ft.commit();
ご覧のとおり、「アウト」アニメーションにはアニメーションR.anim.nothingを定義しました。これは、実際には、フラグメントAに、トランザクション中の場所に留まる以外のことをさせたくないためです。
アニメーションリソースは次のとおりです。
slide_in_right.xml
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="100%p"
android:toXDelta="0"
android:zAdjustment="top" />
none.xml
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:fromAlpha="1.0"
android:toAlpha="1.0"
android:zAdjustment="bottom" />