Android 删除幻灯片窗口过渡启动时创建的白色屏幕

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(

我正在使用黑色背景的活动。同样的活动也有一个工具栏和抽屉布局。这个白色的屏幕看起来不一致

在打开活动时,如果幻灯片转换非常缓慢,则会变得更加明显

有什么办法可以去掉这个吗

在第二个活动上设置enter转换的代码:

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退出
  • 等待活动B完成加载
  • 活动B进入
  • 对我来说,解决办法就是简单地删除退出转换。结果看起来几乎一样,当一项新活动滑过时,退出过渡的缺失几乎不明显


    删除退出转换后,看不到出现“白色屏幕”的时间,因为此时活动a仍然存在。

    好的,我将向您更新。但我已经尝试过window.setReturnTransition(幻灯片);与window.setExitTransition(幻灯片)一起使用;和window.setEnterTransition(幻灯片);在调用活动中,没有任何更改。我将尝试只放置window.setReturnTransition(幻灯片);这是我现在实现的。唯一的问题是导航栏出现在enter动画之前,但这比白色屏幕更容易接受。你知道有什么方法可以阻止导航栏显示在这条路线上吗?但我处于沉浸式模式,你可以看看片段事务动画:。但是片段的z排序有一些限制,这可能使它在这种情况下不可行。这实际上是有道理的。但我所指的“白色屏幕”实际上应该是“看”或“是”下一个屏幕。就像使用karaokyo的答案一样,“滑入”视图是下一个活动。棒棒糖的转变有可能吗?不只是设置“windowBackground”的颜色,而是在播放“exitTransition”时实际看到下一个活动?我将尝试将其设置为透明well@John欧内斯特·瓜达卢佩:我刚刚添加了一个gif,效果很好。我假设您正在尝试删除上一个活动的淡入淡出效果(在过渡期间在左侧)?是的,我正在尝试这样做,我希望它也滑出到左侧,而其他活动则从右侧滑入。对不起,我没有摆弄这些过渡yet@JohnErnest Guadalupe更新了答案,为调用活动提供了滑出转换