移除白色屏幕,幻灯片窗口转换在启动时创建

时间:2015-11-06 07:25:00

标签: android android-5.0-lollipop

我正在使用黑色背景的活动。同样的活动还有一个工具栏和一个DrawerLayout。此白色屏幕使外观不一致。

打开活动时,如果幻灯片转换速度非常慢,则会更加明显。

有没有办法删除它?

在第二项活动中设置输入转换的代码:

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>

3 个答案:

答案 0 :(得分:20)

如何在启动活动的过渡期间滑动期间修复白屏:

karaokyos回答利用前棒棒糖 活动过渡。这些转换针对整个活动屏幕,并且不提供在转换期间排除部分屏幕的功能。

John Ernest Guadalupe方法利用棒棒糖中引入的转换(活动和片段转换)。观察到的白色屏幕&#34;是窗口背景,在过渡期间消失(more info about Activity & Fragment Transitions )。我想你正在设置&#34;黑色背景&#34;你的活动在你的布局的根视图中?将窗口背景设置为黑色可以解决您的问题。

编程:

window.setBackgroundDrawable(new ColorDrawable(Color.BLACK));

主题:

<item name="android:windowBackground">@android:color/black</item>

这是结果转换。

Resulting Transition

编辑:如何为调用活动提供required向外滑动(左)转换

第一项活动:

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进行结果转换:

Resulting transition

如果你想摆脱第一个幻灯片和第二个活动的滑入之间的差距你可以设置:

<item name="android:windowAllowEnterTransitionOverlap">true</item>

如何调试转换:

  

当您在打开活动时为幻灯片转换设置非常慢的持续时间时,它会变得更加明显。

要(视觉上)调试过渡,开发中有3个选项(&#34;窗口动画比例&#34;,&#34;过渡动画比例&#34;,&#34;动画持续时间比例&#34;)设置,以乘以所有过渡/动画的持续时间。

答案 1 :(得分:4)

看起来,当您进行自定义转换时,旧活动不会“停留”在视图中。我不知道什么时候开始,但你肯定不需要在以前的一些API级别停留动画。旧的2.0时代overridePendingTransition仍然可以正常运作:

<强>动画/ slide_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>

<强>动画/ slide_out.xml

<?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>

<强>动画/ stay.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:duration="600"/>
</set>

主要活动startActivity

startActivity(intent);
overridePendingTransition(
        R.anim.slide_in,
        R.anim.stay
);

第二项活动的回报:

@Override
public void onBackPressed() {
    super.onBackPressed();

    overridePendingTransition(
            0,
            R.anim.slide_out
    );
}

答案 2 :(得分:0)

这有点晚了,但我自己遇到了同样的事情,在互联网上找不到答案。

屏幕之间存在差距的原因是您同时调用退出转换和输入转换。

一旦调用startActivity,就会发生退出转换,并且在新活动的onCreate之后进入转换。

因此,事件的顺序为:

  1. 活动A退出
  2. 等待活动B完成加载
  3. 活动B进入
  4. 对我来说,解决方案是简单地删除退出过渡。结果看起来几乎相同,并且当新活动滑过它时,退出过渡的缺乏几乎不可察觉。

    删除退出转换后,有一个白色屏幕的时间&#34;没有看到因为在那个时候活动A仍然存在。