如何在slide_left动画期间启动新活动时移除黑色背景?

37

当我通过动画调用新的activity时,背景会变成黑色。
如何去除这个黑色的背景?

我使用的动画是:

getWindow().setBackgroundDrawableResource(R.drawable.mainbg_); 
overridePendingTransition (R.anim.push_up_in,0);
6个回答

78

设置主题对我没有效果,但添加退出动画有用。

overridePendingTransition (R.anim.push_up_in,R.anim.hold);

退出动画,我只是使用了一个什么都不做的动画。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="0%p" android:toYDelta="0%p" android:duration="2000"/>
</set>

这个可以运行。注意:android:duration 应该等于或大于进入活动的动画持续时间。 - Alaa M.
尝试使用android:duration="@android:integer/config_longAnimTime"来使用活动的默认动画持续时间。 - kds23

42

如果您已经设置了主题并且不想使用建议的Theme.Translucent,那么您真正需要的只是将以下内容添加到您的活动/应用程序主题中:

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

1
非常感谢,你救了我的一天。 - Ahmed Adel Ismail
1
这是更好的解决方案,因为如果我们使用应用程序兼容性,我们无法使用@android:style/Theme.Translucent。 - HendraWD
这是完美的解决方案。 - Saurabh Bhandari
这在华为手机上不起作用,因为半透明活动不会以全屏模式打开。 - Rajesh Tiwari

22

在清单文件中将该活动的主题设置为半透明。

android:theme="@android:style/Theme.Translucent"

所以你的代码将会像这样

<activity android:name=".AdActivity"
        android:theme="@android:style/Theme.Translucent" />

11

如果您正在使用AppCompat ActionBarActivity,则需要使用扩展Theme.AppCompat的主题。

为了让我有选项仅向需要它的活动(使用intent flag_activity_new_task启动的活动)添加背景透明度,但保留其余应用的背景...我扩展了我的主题并在该样式中设置了透明背景选项。

<!-- The main theme applied to the application or activity -->
<style name="Theme.app" parent="Theme.AppCompat.NoActionBar">
    <!-- Your main app theme items go here-->
    <item name="android:windowBackground">@drawable/some_drawable</item>
</style>

<!-- Transparent background for app / activity -->
<style name="Theme.app.Translucent" parent="Theme.app">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
</style>

1
在您的应用程序中添加以下属性,然后替换为您自己的颜色:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
     <item name="android:windowBackground">@color/colorBackground</item>
</style>

如果您使用overridePendingTransition()方法,下面的代码会影响Activity组件。在Activity切换时,它会导致转场效果出现问题,看起来不太正常。因此,请不要使用这段代码来避免黑屏问题。
 android:theme="@android:style/Theme.Translucent"

                   OR

 <!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
       <item name="android:windowIsTranslucent">true</item>
</style>

1
我的问题得到解决的方法是理解以下方法:
overridePendingTransition(R.anim.A,R.anim.B);
这里的第一个参数A应用于即将进入的Activity。例如,如果我们从X Activity转到Y,并应用上述动画,则A应用于Y,B应用于X。
同样地,当我们通过后退按钮从Y返回到X时,如果我们应用相同的方法: 那么A应用于Y,B应用于X。
因此,这意味着在从Y返回X时,将Hold动画应用于X,将从左到右的动画应用于Y。
希望对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接