如何制做启动画面?

我想让个人应用看起来更专业,因此我决定要制做一个初始屏幕。 android

我将如何建立它而后实现它? ios


#1楼

public class MainActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Thread t=new Thread()
    {

        public void run()
        {   

            try {

                sleep(2000);
                finish();
                Intent cv=new Intent(MainActivity.this,HomeScreen.class/*otherclass*/);
                startActivity(cv);
            } 

            catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
    t.start();
}

#2楼

请注意,此解决方案不会让用户等待更多:启动屏幕的延迟取决于应用程序的启动时间。 app

当您打开任何android应用程序时,默认状况下都会出现一些黑屏,其顶部和应用程序的图标位于顶部,您可使用样式/主题来对其进行更改。 ide

首先,在values文件夹中建立一个style.xml并为其添加样式。 post

<style name="splashScreenTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">
    <item name="android:windowBackground">@drawable/splash_screen</item>
</style>

除了使用@android:style/Theme.DeviceDefault.Light.NoActionBar您还可使用其余任何主题做为父主题。 动画

其次,在您的应用程序Manifest.xml中,将android:theme="@style/splashScreenTheme"到您的主要活动中。 this

<activity
        android:name="MainActivity"
        android:label="@string/app_name"
        android:theme="@style/splashScreenTheme" >

第三,在onCreate()启动活动中更新主题。 google

protected void onCreate(Bundle savedInstanceState) {
    // Make sure this is before calling super.onCreate
    setTheme(R.style.mainAppTheme);
    super.onCreate(savedInstanceState);
}

更新查看这篇文章https://plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd感谢@ mat1h和@adelriosantiago 编码


#3楼

默认状况下,Splash Screnn不会自动使您的应用程序看起来更专业。 专业设计的启动画面可使您的应用程序看起来更加专业,可是若是您不知道如何编写,则其他应用程序实际上将有多专业。 spa

拥有启动画面的惟一缘由(借口)是由于您正在执行大量计算或正在等待GPS / WiFi启动,由于您的应用程序依赖于启动以前。 若是没有这些计算的结果或没法使用GPS / WiFi(等等),您的应用程序就会死在水中,所以您会以为您须要启动屏幕,而且必须阻止任何其余正在运行的程序(包括背景程序)的屏幕视图)。

这样的启动画面应看起来像您的全屏应用程序,以给人以它已被初始化的印象,而后在完成冗长的计算以后,能够填充最终的详细信息(对图像进行调整)。 是这样的状况或这是程序设计的惟一方式的可能性 很小

最好容许用户(以及操做系统的其他部分)在等待时执行其余操做,而不是将程序设计为依赖会花费一些时间(等待时间不肯定)的程序。

手机上已经有图标表示GPS / WiFi正在启动。 初始屏幕占用的时间或空间可用于加载预计算或实际执行计算。 有关您建立的问题以及必须考虑的问题,请参见下面的第一个连接。

若是您绝对必须等待这些计算或GPS / WiFi,则最好只是让应用程序启动并弹出一个弹出框,指出必须等待这些计算(TEXTUAL“正在初始化”消息是能够的)。 可能须要等待GPS / WiFi(若是还没有在其余程序中启用它们),所以无需宣布其等待时间。

请记住,启动屏幕启动时,程序实际上已经在运行,您所要作的就是延迟使用程序,并拖延CPU / GPU来执行大多数没必要要的操做。

每次启动程序时,咱们最好真的要等待并看到您的启动画面,不然咱们不会以为它写的很专业。 使“启动画面”为“全屏”并与实际程序的画面重复(所以咱们认为实际上它还没有初始化)可能会实现您的目标(使您的程序看上去更专业),但我对此不会打赌。

为何不这样作: http : //cyrilmottier.com/2012/05/03/splash-screens-are-evil-dont-use-them/

怎么作: https//encrypted.google.com/search?q = Android + splash + screen + source

所以,有充分的理由不这样作,可是若是您肯定本身的状况超出了这些示例的范围,则上面提供了执行此操做的方法。 确保它确实使您的应用程序看起来更专业,或者您已经击败了这样作的惟一理由。

就像YouTube频道同样,每一个视频都以冗长的图形简介(和Outro)开头,或者感受有必要讲个笑话或说明过去一周(不是喜剧或生活风格频道)发生了什么。 只是显示节目! (只需运行该程序)。


#4楼

启动画面示例:

public class MainActivity extends Activity {
    private ImageView splashImageView;
    boolean splashloading = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        splashImageView = new ImageView(this);
        splashImageView.setScaleType(ScaleType.FIT_XY);
        splashImageView.setImageResource(R.drawable.ic_launcher);
        setContentView(splashImageView);
        splashloading = true;
        Handler h = new Handler();
        h.postDelayed(new Runnable() {
            public void run() {
                splashloading = false;
                setContentView(R.layout.activity_main);
            }

        }, 3000);

    }

}

#5楼

上面的答案很好,但我想补充一下。 我是Android新手,在开发过程当中遇到了这些问题。 但愿这能够帮助像我这样的人。

  1. 闪屏是我应用程序的入口,所以在AndroidManifest.xml中添加如下几行。

    <activity android:name=".SplashActivity" android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
  2. 初始屏幕在应用程序生命周期中仅应显示一次,我使用布尔变量记录初始屏幕的状态,而且仅在第一次显示。

    public class SplashActivity extends Activity { private static boolean splashLoaded = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!splashLoaded) { setContentView(R.layout.activity_splash); int secondsDelayed = 1; new Handler().postDelayed(new Runnable() { public void run() { startActivity(new Intent(SplashActivity.this, MainActivity.class)); finish(); } }, secondsDelayed * 500); splashLoaded = true; } else { Intent goToMainActivity = new Intent(SplashActivity.this, MainActivity.class); goToMainActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(goToMainActivity); finish(); } } }

祝您编码愉快!

相关文章
相关标签/搜索