Android - 片段转换时出现黑屏
Posted
技术标签:
【中文标题】Android - 片段转换时出现黑屏【英文标题】:Android - blank screen while fragment transition 【发布时间】:2020-01-29 18:23:02 【问题描述】:我使用自定义片段动画。 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();
【问题讨论】:
【参考方案1】:尝试添加这一行,因为你正在用新的片段替换之前的片段,它会显示一个空白屏幕。
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();
【讨论】:
我不能使用回栈。它并不适合我的所有情况。【参考方案2】:尝试像这样添加弹出进入和弹出退出动画:
supportFragmentManager.beginTransaction().setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.enter, R.anim.exit).replace(R.id.container, fragment).commit()
【讨论】:
以上是关于Android - 片段转换时出现黑屏的主要内容,如果未能解决你的问题,请参考以下文章
从 UINavigationController 中通过自定义转换关闭 UIViewController 时出现黑屏
从UINavigationController中解除具有自定义转换的UIViewController时出现黑屏
快速切换到 UITableViewController 时出现黑屏