Pages

mardi 10 juillet 2012

Ajouter un splash screen dans une application Android (12:x)

Si votre application est longue à charger il est préférable d'afficher quelque chose à l'utilisateur pour lui montrer que son action ouvrir votre application est prise en compte. Si vous maîtriser le nombre d'éléments à initaliser au démarrage il est opportun de lui afficher une barre de progression (voir ProgessBar)

Dans notre cas nous allons simplement afficher l'image suivante (placée dans le répertoire res/drawable)
Le splash screen sera une activité que nous allons déclarer dans le fichier AndroidManifest.xml
<application
        android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.Light">
        <activity
            android:name=".SplashActivity"
            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=".ScoreSheetActivity" android:label="@string/app_name"
            android:screenOrientation="portrait">
        </activity>
        ....
</application>



Dans notre activité nous allons déclarer un objet Handler permettant de déclencher une action dans un nouveau thread.
public class SplashActivity extends Activity{

    
    private final static int DELAY = 3000;
    
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);
    }
    
    /**
     * On gère le traitement du splashscreen dans la méthode onResume
     * pour gérer le cas où l'application est mis en pause par une autre
     * ou par le système 
     */
    @Override
    protected void onResume(){
super.onResume();
        //Un handler permet de lancer un traitement dans le futur
new Handler().postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                //Finish the splash activity so it can't be returned to.
                SplashActivity.this.finish();
                // Create an Intent that will start the main activity.
                Intent mainIntent = new Intent(SplashActivity.this, ScoreSheetActivity.class);
                SplashActivity.this.startActivity(mainIntent);
            }
        } , DELAY);
    }
}


Le layout splash.xml sera de cette forme

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/splash" />

</RelativeLayout>


Article précédent / Sommaire / Article suivant

Aucun commentaire:

Enregistrer un commentaire

Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.