Android, делаем экран приветствия при запуске приложения

Так получилось, что при разработке нового приложения, пришлось реализовать такую штуку. При загрузке приложения необходимо было показывать не чёрный экран с заголовком, как у большинства приложений, а выводить на экран некое изображение, называют его Splash screen. Погуглив и собрав воедино знания людей получилась весьма неплохая штука, и так приступим:

  1. Создадим в нашем приложении новый класс SplashScreen. Переменная _splashTime задаёт дополнительное время ожидания после загрузки приложения, после чего будет запущено новое activity - MainActivity.
    public class SplashScreen extends Activity {
    
        //how long until we go to the next activity
        protected int _splashTime = 1000;
    
        private Thread splashTread;
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.splash);
    
            final SplashScreen sPlashScreen = this;
    
            // thread for displaying the SplashScreen
            splashTread = new Thread() {
                @Override
                public void run() {
                    try {
                        synchronized(this){
    
                            //wait 5 sec
                            wait(_splashTime);
                        }
    
                    } catch(InterruptedException e) {}
                    finally {
                        finish();
    
                        //start a new activity
                        Intent i = new Intent();
                        i.setClass(sPlashScreen, MainActivity.class);
                        startActivity(i);
    
                        finish();
                    }
                }
            };
    
            splashTread.start();
        }
    
        //Function that will handle the touch
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                synchronized(splashTread){
                    splashTread.notifyAll();
                }
            }
            return true;
        }
    
    }
  2. Пропише в файле AndroidManifest.xml новое activity и сделаем его запуск при старте приложения:
    <activity android:name=".SplashScreen" android:theme="@style/Theme.Splash">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        <intent-filter>
    <activity>
  3. При вставке, сразу же наша IDE начнёт ругаться на несуществующую тему Theme.Splash, поэтому создадим её в стилях values/styles.xml. В стилях отключаем отображаемый заголовок и устанавливаем фон activity:
    <resources>
        <style name="Theme.Splash" parent="android:Theme">
            <item name="android:windowBackground">@drawable/main</item>
            <item name="android:windowNoTitle">true</item>
        </style>
    </resources>

На этом всё, пробуем запустить наше приложение и радуемся красивой заставке.

P.Nixx, 01.10.2012, 11:02