我正在使用黑色背景的活动。同样的活动还有一个工具栏和一个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>
答案 0 :(得分:20)
编程:
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>
当您在打开活动时为幻灯片转换设置非常慢的持续时间时,它会变得更加明显。
要(视觉上)调试过渡,开发中有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之后进入转换。
因此,事件的顺序为:
对我来说,解决方案是简单地删除退出过渡。结果看起来几乎相同,并且当新活动滑过它时,退出过渡的缺乏几乎不可察觉。
删除退出转换后,有一个白色屏幕的时间&#34;没有看到因为在那个时候活动A仍然存在。