1

我使用自定义片段动画。xml文件如下:

从下到上:

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

从上到下:

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

</set>

此示例按预期工作:

FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setCustomAnimations(0, R.anim.top_to_bottom);
ft.replace(R.id.main_layout, fragmentA, fragmentA.ID);
ft.commit();

但是这个例子对我不起作用。我在过渡时看到空白屏幕。Fragment A 消失,FragmentB 上升时出现黑屏。

FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setCustomAnimations(R.anim.bottom_to_top, 0);
ft.replace(R.id.main_layout, fragmentB, fragmentB.ID);
ft.commit();
4

2 回答 2

0

尝试添加这一行,因为您正在用新的片段替换前一个片段,它向您显示一个空白屏幕。

FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setCustomAnimations(R.anim.bottom_to_top, 0);
ft.replace(R.id.main_layout, fragmentB, fragmentB.ID);

// This line will maintain previous fragment in stack
ft.addToBackStack(fragmentB.getClass().getSimpleName());

ft.commit();
于 2019-09-30T13:24:14.663 回答
0

尝试像这样添加弹出进入和弹出退出动画:

            supportFragmentManager.beginTransaction().setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.enter, R.anim.exit).replace(R.id.container, fragment).commit()
于 2021-07-14T19:35:17.257 回答