IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Fin d'un splashscreen


Sujet :

Android

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 182
    Points : 159
    Points
    159
    Par défaut Fin d'un splashscreen
    Bonjour

    J'ai réalisé un splash screen au démarrage de mon programme. Celui-ci se lance correctement mais l'activité ne s'arrete jamais . Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            Thread splashThread = new Thread() {
             @Override
             public void run() {
                try {
                	for (int Cpt = 0; Cpt < 5; Cpt++){
                		sleep(100);
                		Log.i("Test", "Cpt = " + String.valueOf(Cpt));
                	}
     
                } catch (InterruptedException e) {
    	               // do nothing
                }finally{
                	finish();
                	Intent i = new Intent();
                	i.setClassName("com.android.maquette","com.android.maquette.Splash");
                	startActivity(i);
                }
             }
            };
            splashThread.start();
        }
    Une idée ?
    Merci d'avance

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 51
    Points : 106
    Points
    106
    Par défaut C’est la bonne classe ?
    À première vue, il semble que c’est le nom d’une splash que tu passes à ton Intent, c’est ça que tu veux faire ?

    En plus, il doit marcher mais je te conseille d’utiliser un Handler au lieu de ton propre Thread. Quelque chose comme suivant (attention – pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    new Handler().postAtTime(new Runnable() {
        public void run() {
            AbstractActivity.this.startActivity(
                new Intent(Splash.this, MainActivity.class);
            );
            Splash.this.finish();
        }
    },500);
    Dernière chose – est-ce que tu veux vraiment utiliser com.android comme package ?

    J’espère que tu le trouves utile.

  3. #3
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Oui, tu peux ajouter un Handler...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private final Handler splashHandler = new Handler() {
    	@Override
    	public void handleMessage(final Message msg) {
    		if (msg.what == FinSplash)  {
    			finish();
    		}
            }
    };
    Et dans la thread du splash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    private void Splash() {
     
    	// Affichage de la boite de dialogue (ou du splash)
            progressDialog = ProgressDialog.show(Splash.this, "Title", "Message");
    	progressDialog.setCancelable(false);
    	progressDialog.setIcon(R.drawable.icon);
     
    	new Thread() {
    		@Override
    		public void run() {
                            try {
    			        // traitement
    			} catch (Exception e) {
    				errorMessage = e.getMessage();
    				e.printStackTrace();
    			} finally {
    				msg.what = FinSplash;
    				msg.obj = "message";
    				splashHandler.sendMessage(msg);
    			}
                     }
    	}.start();
    }
    Christian
    Nexus 1 sous Cyanogen - Acer A500

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 182
    Points : 159
    Points
    159
    Par défaut
    Effectivement avec un handler ca marche.
    Pour ceux que cela intéresse, voicile code complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    public class TestSplash extends Activity {
     
    	private static final int STOPSPLASH = 0;
    	private static final long SPLASHTIME = 5000;
    	private ImageView splash;
     
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            splash = (ImageView) findViewById(R.id.ImageView01);
            Message msg = new Message();
            msg.what = STOPSPLASH;
            splashHandler.sendMessageDelayed(msg, SPLASHTIME);
        }
     
        private Handler splashHandler = new Handler() {
        	@Override
        	public void handleMessage(Message msg) {
        		switch (msg.what) {
        			case STOPSPLASH:
        				//remove SplashScreen from view
        				splash.setVisibility(View.GONE);
        				break;
        		}
        		super.handleMessage(msg);
        	}
        	  };
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    	<TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
        />
    	<ImageView 
    	android:id="@+id/ImageView01" 
    	android:layout_width="wrap_content" 
    	android:layout_height="wrap_content" 
    	android:background="@drawable/splashscreen">
    	</ImageView>
    </LinearLayout>
    PS : Ce code n'est pas de moi, il est de a. Vogel à l'adresse :
    http://www.anddev.org/simple_splash_screen-t811.html

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 66
    Points : 53
    Points
    53
    Par défaut
    Je remonte ce topic car j'utilise un splashscreen pour mon appli (cf mon précédent topic récemment ^^ ) et j'utilise la même méthode que ci-dessus, or il s'avère que quand je veux quitter l'application pendant le splashscreen il m'affiche quand même mon autre activity ensuite...

    Alors je me disais que passer dans une seule activity avec une AsyncTask ça pourrait le faire, mais je me demandais si finalement on peut le faire ? car ça reviendrait à afficher un 1er layout (donc un 1er setcontentview) et à la fin de mon asynctask le changer...

    Vous pensez que ça marche ? Si non, de quelle manière devrais-je procéder (dans les grandes lignes, j'ai pas besoin du code hein) pour utiliser un splashscreen durant lequel je puisse faire utiliser la touche home ou back sans que l'activité suivante se charge...
    Je pourrais également killer le processus dans un onPause (ou onStop, on Destroy, je sais jamais trop lequel est appelé à ce moment là ) mais c'est moche paraît-il...

    Merci d'avance encore pour votre aide !!!

  6. #6
    Membre habitué Avatar de cad13
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 247
    Points : 197
    Points
    197
    Par défaut
    Et en faisant un Finish() dans le onPause ?
    Christian
    Nexus 1 sous Cyanogen - Acer A500

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Est ce que la fin du C est proche ou pas ?
    Par Nasky dans le forum C
    Réponses: 116
    Dernier message: 13/12/2016, 15h23
  2. Réponses: 7
    Dernier message: 18/06/2003, 15h20
  3. Attendre la fin du chargement de la page dans un WebBrowser
    Par core1 dans le forum Web & réseau
    Réponses: 5
    Dernier message: 15/06/2003, 04h12
  4. Comment Attendre la fin d'un Processus
    Par mr_titi dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/06/2003, 16h35
  5. Fin de programme dans une procédure
    Par Sinclair dans le forum Langage
    Réponses: 13
    Dernier message: 29/11/2002, 22h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo