如何製做啓動畫面?

我想讓個人應用看起來更專業,因此我決定要製做一個初始屏幕。 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(); } } }

祝您編碼愉快!

相關文章
相關標籤/搜索