Android应用程序显示空白屏幕而不是闪屏

时间:2016-08-04 14:44:56

标签: android splash-screen

我已经在这几个小时了......请有人在这里指出这个问题吗?

这是我的价值观/风格:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="AppTheme.NoActionBar">
        <item name="android:windowDisablePreview">true</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="Theme.Transparent" parent="AppTheme">
        <item name="android:windowDisablePreview">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowActionBar">false</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowIsTranslucent">true</item>
    </style>

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

</resources>

这是我的清单文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nuku.mc.myfypapp">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.Transparent">
        <activity
            android:name=".SplashScreen"
            android:theme="@style/Theme.Transparent"
            android:label="@string/app_name"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".LoginActivity"
            android:label="@string/app_name"
            android:windowSoftInputMode="adjustPan"
            />
        <activity
            android:name=".SignupActivity"
            android:windowSoftInputMode="adjustPan" />
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:label="@string/app_name"
            android:windowSoftInputMode="adjustPan" />
    </application>

</manifest>

这是app splash_screen.xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/lin_lay"
    android:background="@android:color/holo_orange_dark">

    <ImageView
        android:layout_width="360dp"
        android:layout_height="480dp"
        android:id="@+id/imageView2"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:background="@android:color/holo_orange_dark"
        android:contentDescription="@string/splash_text"
        />
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="@string/splash_text"
        android:id="@+id/splashText"
        android:layout_marginBottom="150dp"
        android:layout_alignBottom="@+id/imageView2"
        android:layout_centerHorizontal="true"
        android:textStyle="bold|italic"
        android:focusable="true"
        android:textSize="@dimen/design_fab_image_size"
        android:textColor="#ffffff" />

</RelativeLayout>

这是splash.java

public class SplashScreen extends Activity {

    SessionManager manager;

    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        Window window = getWindow();
        window.setFormat(PixelFormat.RGBA_8888);
    }

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash_screen);
        manager = new SessionManager();
        StartAnimations();
    }
    private void StartAnimations() {
        Animation anim = AnimationUtils.loadAnimation(this, R.anim.alpha);
        anim.reset();
        RelativeLayout l=(RelativeLayout) findViewById(R.id.lin_lay);
        l.clearAnimation();
        l.startAnimation(anim);

        anim = AnimationUtils.loadAnimation(this, R.anim.translate);
        anim.reset();
        ImageView iv = (ImageView) findViewById(R.id.imageView);
        iv.clearAnimation();
        iv.startAnimation(anim);

        Thread background = new Thread() {
            public void run() {

                try {
                    // Thread will sleep for 3 seconds
                    sleep(3*1000);

                    // After 5 seconds redirect to another intent
                    String status=manager.getPreferences(SplashScreen.this,"status");
                    Log.d("status",status);
                    if (status.equals("1")){
                        Intent i=new Intent(SplashScreen.this,MainActivity.class);
                        startActivity(i);
                    }else{
                       Intent i=new Intent(SplashScreen.this,LoginActivity.class);
                        startActivity(i);
                    }


                    //Remove activity
                    finish();

                } catch (Exception e) {

                }
            }
        };

        // start thread
        background.start();

    }
}

我现在已经关注了五个以上的教程,仍然无法解决问题

2 个答案:

答案 0 :(得分:2)

关注this article。 它明确地说

  

启动屏幕是屏幕显示之前能够启动的内容   膨胀UI是启动主题的窗口背景   活动指定。所以我们首先需要的是一个特殊的主题   发射活动。

我按照这篇文章实现了启动画面。因此,您不需要创建任何启动画面活动。只需将文本转换为可绘制资源,然后将其用作启动活动的启动画面主题中的背景。

答案 1 :(得分:0)

唯一看起来非常错误的是你在onCreate中调用StartAnimations。你想在onResume中做到这一点。我也会尝试将其分解为步骤,以查看每个步骤是否可以调试它。对我来说,第1步将默认背景说出红色,看它是否显示出来。然后我会尝试将其设置为50%红色,以查看alpha是否正常工作。然后我会尝试一次测试一个动画,首先是背景动画,然后是翻译动画。将其分解成更小的部分,您可以更容易地解决这个问题。

由于你是在onCreate中启动动画,我猜测当前正在发生的事情是你的动画在第一次呈现Activity之前已经完成了。请记住,在onResume中它不会渲染。由于白色是活动的默认颜色,所以你看到的是几秒钟的白色屏幕显示,然后是你的第二个活动。

同样根据您希望背景淡入的设计,您需要在清单中设置为该活动的主题中设置android:background。如果你不这样做,那么你会看到的(当你正确实现它时)是一个白色的屏幕大约.5-2秒,然后在它开始运行你的启动画面动画时变为透明。 / p>