Android 删除幻灯片窗口过渡启动时创建的白色屏幕
我正在使用黑色背景的活动。同样的活动也有一个工具栏和抽屉布局。这个白色的屏幕看起来不一致 在打开活动时,如果幻灯片转换非常缓慢,则会变得更加明显 有什么办法可以去掉这个吗 在第二个活动上设置enter转换的代码:Android 删除幻灯片窗口过渡启动时创建的白色屏幕,android,android-5.0-lollipop,Android,Android 5.0 Lollipop,我正在使用黑色背景的活动。同样的活动也有一个工具栏和抽屉布局。这个白色的屏幕看起来不一致 在打开活动时,如果幻灯片转换非常缓慢,则会变得更加明显 有什么办法可以去掉这个吗 在第二个活动上设置enter转换的代码: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = activity.getWindow(); Slide slide = new Slide(
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
Slide slide = new Slide();
slide.setSlideEdge(Gravity.RIGHT);
slide.excludeTarget(android.R.id.statusBarBackground, true);
slide.excludeTarget(android.R.id.navigationBarBackground, true);
window.setEnterTransition(slide);
window.setExitTransition(slide);
}
我的风格
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowActivityTransitions">true</item>
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">false</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowSoftInputMode">stateAlwaysHidden|adjustResize</item>
</style>
@颜色/原色暗
@颜色/颜色重音
真的
真的
真的
假的
真的
StateAllwayshidden |调整大小
当您进行自定义转换时,旧活动似乎不会“保留”在视图中。我不知道这是什么时候开始的,但在以前的一些API级别中,您肯定不需要保持动画。旧的2.0时代<代码>覆盖了Transition仍然可以正常工作:
anim/slide\u in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="100%"
android:toXDelta="0%"
android:duration="600"
/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0%"
android:toXDelta="100%"
android:duration="600"
/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:duration="600"/>
</set>
第二个活动的返回:
startActivity(intent);
overridePendingTransition(
R.anim.slide_in,
R.anim.stay
);
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(
0,
R.anim.slide_out
);
}
如何在已启动活动的滑入过渡期间修复白色屏幕:
卡拉ok的答案是利用棒棒糖
活动转换。这些转换以整个活动屏幕为目标,不提供在转换期间排除部分屏幕的功能
John Ernest Guadalupe方法利用棒棒糖中引入的转换(活动和片段转换)。观察到的“白色屏幕”是窗口背景,在过渡过程中逐渐消失()。我猜您正在布局的根视图中设置活动的“黑色背景”?将窗口背景设置为黑色应该可以解决您的问题
以编程方式:
window.setBackgroundDrawable(new ColorDrawable(Color.BLACK));
主题:
<item name="android:windowBackground">@android:color/black</item>
第二项活动:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
Slide slide = new Slide();
slide.setInterpolator(new LinearInterpolator());
slide.setSlideEdge(Gravity.LEFT);
slide.excludeTarget(android.R.id.statusBarBackground, true);
slide.excludeTarget(android.R.id.navigationBarBackground, true);
window.setExitTransition(slide); // The Transition to use to move Views out of the scene when calling a new Activity.
window.setReenterTransition(slide); // The Transition to use to move Views into the scene when reentering from a previously-started Activity.
window.setBackgroundDrawable(new ColorDrawable(Color.BLACK));
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
Slide slide = new Slide();
slide.setInterpolator(new LinearInterpolator());
slide.setSlideEdge(Gravity.RIGHT);
slide.excludeTarget(android.R.id.statusBarBackground, true);
slide.excludeTarget(android.R.id.navigationBarBackground, true);
window.setEnterTransition(slide); // The Transition to use to move Views into the initial Scene.
window.setReturnTransition(slide); // The Transition to use to move Views out of the Scene when the Window is preparing to close.
window.setBackgroundDrawable(new ColorDrawable(Color.BLACK));
}
您可以尝试使用不同的插值器来更改过渡的速度
使用LinearInterpolator生成的转换:
如果要消除第一个活动的滑出和第二个活动的滑入之间的间隙,可以设置:
<item name="android:windowAllowEnterTransitionOverlap">true</item>
true
如何调试转换:
当您在打开活动时将幻灯片转换的持续时间设置得非常慢时,它会变得更加明显
要(直观地)调试过渡,有3个选项(“窗口动画比例”、“过渡动画比例”、“动画持续时间比例”)在开发设置中增加所有转换/动画的持续时间。我也有这个问题,但是片段转换,因为所有出现的解决方案都只是设置窗口背景,这可能与活动有关,我没有真正取得任何进展。Than Than I think=>让我们试着在我推进到transparent的片段中设置rootview的背景。。瞧,这就成功了。因此,我正在推送的片段的根视图在xml中如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent">
这有点晚了,但我自己也遇到了同样的问题,在互联网上找不到答案 屏幕之间出现间隙的原因是您同时调用退出转换和进入转换 一旦调用startActivity,退出转换就会发生,而进入转换会在新活动创建之后发生 因此,事件的顺序为:
删除退出转换后,看不到出现“白色屏幕”的时间,因为此时活动a仍然存在。好的,我将向您更新。但我已经尝试过window.setReturnTransition(幻灯片);与window.setExitTransition(幻灯片)一起使用;和window.setEnterTransition(幻灯片);在调用活动中,没有任何更改。我将尝试只放置window.setReturnTransition(幻灯片);这是我现在实现的。唯一的问题是导航栏出现在enter动画之前,但这比白色屏幕更容易接受。你知道有什么方法可以阻止导航栏显示在这条路线上吗?但我处于沉浸式模式,你可以看看片段事务动画:。但是片段的z排序有一些限制,这可能使它在这种情况下不可行。这实际上是有道理的。但我所指的“白色屏幕”实际上应该是“看”或“是”下一个屏幕。就像使用karaokyo的答案一样,“滑入”视图是下一个活动。棒棒糖的转变有可能吗?不只是设置“windowBackground”的颜色,而是在播放“exitTransition”时实际看到下一个活动?我将尝试将其设置为透明well@John欧内斯特·瓜达卢佩:我刚刚添加了一个gif,效果很好。我假设您正在尝试删除上一个活动的淡入淡出效果(在过渡期间在左侧)?是的,我正在尝试这样做,我希望它也滑出到左侧,而其他活动则从右侧滑入。对不起,我没有摆弄这些过渡yet@JohnErnest Guadalupe更新了答案,为调用活动提供了滑出转换