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 :

Changer la couleur d'un Button pendant une seconde.


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chercheur d'Emploi
    Inscrit en
    Février 2017
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'Emploi

    Informations forums :
    Inscription : Février 2017
    Messages : 86
    Par défaut Changer la couleur d'un Button pendant une seconde.
    Bonjour

    Le but ici est de changer la couleur du bouton "buttonEnHaut" en vert quand l'utilisateur clique dessus et de remettre la couleur par défaut au bout d'une seconde.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        @Override
        public void onClick(View v) {
            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) buttonEnHaut.getLayoutParams();
            switch (v.getId()) {
                case R.id.buttonEnHaut:
                    buttonEnHaut.setBackgroundColor(Color.GREEN);
                    try {
                        Thread.sleep(1000);
                    } catch (Exception e) {
                    }
                    buttonEnHaut.setBackgroundResource(android.R.drawable.btn_default);
                    break;
            }
    Sauf que le résultat n'est pas du tout celui attendu, voila ce que ça donne:

    l'utilisateur clique une première fois: la couleur ne change pas cependant l'interface graphique du boutton reagis comme si l'utilisateur laissait son soigt appuyé pendant 1 seconde. Ensuite l'interface graphique du bouton est legerement differente des autres boutons par défault (fond gris avec degradé et petit contour)

    l'utilisateur clique une deuxième fois: le bouton devient ORANGE ( ) pendant une seconde et redevient comme avant (fond gris degradé et petit contour).

    les fois suivantes: idem que la deuxième fois.


    Auriez vous une idée les amis ? Je vous laisse le code de l'activité complete au cas ou mais je suis a peu pret sur que le soucis ne vient pas du reste du 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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.RelativeLayout;
    import android.graphics.Color;
     
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
     
        private Button buttonEnHaut = null;
        private Button buttonEnBas = null;
        private Button buttonAGauche = null;
        private Button buttonADroite = null;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            buttonEnHaut = (Button) findViewById(R.id.buttonEnHaut);
            buttonEnBas = (Button) findViewById(R.id.buttonEnBas);
            buttonAGauche = (Button) findViewById(R.id.buttonAGauche);
            buttonADroite = (Button) findViewById(R.id.buttonADroite);
     
            buttonEnHaut.setOnClickListener(this);
            buttonEnBas.setOnClickListener(this);
            buttonAGauche.setOnClickListener(this);
            buttonADroite.setOnClickListener(this);
        }
     
        @Override
        public void onClick(View v) {
            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)buttonEnHaut.getLayoutParams();
            switch (v.getId()) {
                case R.id.buttonEnHaut:
                    buttonEnHaut.setBackgroundColor(Color.GREEN);
                    try {
                        Thread.sleep(1000);
                    } catch (Exception e) {}
                    buttonEnHaut.setBackgroundResource(android.R.drawable.btn_default);  //cette ligne fait tout foirer
                    break;
                case R.id.buttonEnBas:
                    break;
                case R.id.buttonAGauche:
                    break;
                case R.id.buttonADroite:
                    break;
            }
        }
     
    }

  2. #2
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    A mon avis cela se gère essentiellement avec des ressources :
    - Des états pour les boutons (https://developer.android.com/guide/...-resource.html)
    - Des animations
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tu fais Thread.sleep(1000); , donc tu bloque complètement l'interface graphique pendant 1 sec. normal que le bouton semble bloqué. C'est d'ailleurs "interdit" de faire un sleep sur le thread UI.

    Il y'a 2 solutions à ton problème :

    - Changer la couleur du bouton au clic , lancer un timer de la durée voulue , rechanger la couleur à la fin du timer
    - Utiliser une animation d'une certaine durée pour changer la couleur du bouton
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [C#] Changer les couleurs des titres colonnes d'une listView
    Par ExSter dans le forum Windows Forms
    Réponses: 4
    Dernier message: 15/04/2007, 21h02
  2. Changer la couleur de certaines lignes ds une liste
    Par Ragnarok85 dans le forum Access
    Réponses: 4
    Dernier message: 04/01/2007, 10h18
  3. Comment changer la couleur d'un item d'une listBox?
    Par Mickey.jet dans le forum Delphi
    Réponses: 3
    Dernier message: 19/05/2006, 16h52
  4. Réponses: 10
    Dernier message: 04/04/2005, 21h52

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