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 :

Mettre en pause une boucle for


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 2
    Par défaut Mettre en pause une boucle for
    Bonjour,

    j'aimerais pouvoir attendre 3 seconde entre chaque changement d'image des mes boutons. Y-aurai-t-il un moyen de "mettre en pause la boucle" ?
    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
    32
    for(int iCpt=0; iCpt<iCptCouleur; iCpt++)
                    {
     
                            switch (tCouleur[iCpt])
                            {
                                case 1:
                                    btnRouge.setImageResource(R.drawable.rougec);
                                    btnBleu.setImageResource(R.drawable.bleu);
                                    btnVert.setImageResource(R.drawable.vert);
                                    btnJaune.setImageResource(R.drawable.jaune);
                                    break;
                                case 2:
                                    btnBleu.setImageResource(R.drawable.bleuc);
                                    btnRouge.setImageResource(R.drawable.rouge);
                                    btnVert.setImageResource(R.drawable.vert);
                                    btnJaune.setImageResource(R.drawable.jaune);
                                    break;
                                case 3:
                                    btnVert.setImageResource(R.drawable.vertc);
                                    btnRouge.setImageResource(R.drawable.rouge);
                                    btnBleu.setImageResource(R.drawable.bleu);
                                    btnJaune.setImageResource(R.drawable.jaune);
                                    break;
                                case 4:
                                    btnJaune.setImageResource(R.drawable.jaunec);
                                    btnRouge.setImageResource(R.drawable.rouge);
                                    btnBleu.setImageResource(R.drawable.bleu);
                                    btnVert.setImageResource(R.drawable.vert);
                                    break;
     
                            }
                    }

    Merci d'avance de votre aide et bonne journée.

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Non






    Bon ok, c'est trop court... je vais tenter d'expliquer:
    * On ne fait jamais de "pause" dans un programme. Le but d'un programme est de dérouler le maximum d'instructions en un minimum de temps suite à un événement (appui sur un bouton, lancement d'une application,...). "faire une pause" est donc contraire au but même d'un programme informatique.
    * Il est possible parfois qu'on doive réellement "attendre" un événement (des données sont présentes en lecture: IO, ou une échéance arrive à son terme: Time). Dans ce cas une seule possibilité: Utiliser un "thread" qui va s'endormir le temps que l'événement arrive (fonctions "wait / signal" en java par exemple). A noter que certaines fonctions de lecture IO dans java utilisent déjà cette méthode (InputStream.read peut "bloquer" le temps que les données arrivent) c'est pour cette raison qu'il est recommandé (dans Android) de faire les opérations IO dans un thread à part (ou Loader, ou encore AsyncTask sous Android).
    * Il est possible de générer des événements de manière régulières (par exemple... toutes les 3s). Je pense en particulier à Handler.postDelayed !

    Le code s'en trouve donc modifié:
    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
    32
    33
    34
    35
    36
    37
    38
     
    class TotoActivity extends Activity
    {
     
         public void onStart()
         {
               changeColor();
         }
     
         public void onStop()
         {
               if (this.colorHandler != null) {
                   this.colorHandler.removeCallbacks(this.colorRunnable);
                   this.colorHandler = null;
               }
         }
     
         private Handler colorHandler;
         private int iCpt = -1;
         private static final long CHANGE_COLOR_DELAY = 3000;
         private final Runnable colorRunnable = new Runnable() { public void run() { TotoActivity.this.changeColor(); } };
     
         private void changeColor()
         {
             ++iCpt;
             if (iCpt >=  iCptCouleur) {
                 this.colorHandler = null;
                 return;
             }
     
             switch (tCouleur[iCpt]) {
                   ....
             }
     
             if (this.colorHandler == null) this.colorHandler = new Handler();
             this.colorHandler.postDelayed(this.colorRunnable,  CHANGE_COLOR_DELAY);
          }
    }

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 2
    Par défaut
    Argh des threads mon plus grand ennemi. On dirait que je n'ai pas le choix et qu'il va me falloir le vaincre une bonne fois pour toute .

    Merci de ton aide.

    je m'en vais donc coder tout ceci, et te souhaite une bonne journée.

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Ben ça tombe bien il n'y a pas de thread dans le code que j'ai posté

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

Discussions similaires

  1. Mettre en pause une boucle for (algo de tri)
    Par Naografix dans le forum C#
    Réponses: 14
    Dernier message: 17/02/2015, 11h02
  2. Déclarer et mettre une variable dans une boucle for
    Par xunil2003 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 30/04/2013, 11h55
  3. mettre en pause une boucle while
    Par anthodub dans le forum LabVIEW
    Réponses: 8
    Dernier message: 20/04/2011, 12h27
  4. VB5 Comment mettre en pause une boucle?
    Par geof dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 18/04/2008, 12h08
  5. Réponses: 3
    Dernier message: 06/07/2004, 10h21

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