Changer plusieurs fois d'image onClick

a marqué ce sujet comme résolu.

Bonjour zesteurs,

Je travaille sur un projet, et j'ai un problème que je n'arrive pas à résoudre, peut être pourriez vous m'aider :)

Je dispose d'une image, et j'aimerais lorsque je "clique" dessus, pouvoir en afficher une autre, puis une autre, puis une autre etc ...., et faire çela sans limite, est-ce possible ?

Voici le code simplifié de ce que j'ai pour le moment :

1
2
3
4
5
6
7
8
9
img= (ImageView) findViewById(R.id.choix1);
        img.setOnClickListener(new View.OnClickListener() {
            @Override

            public void onClick(View v) {
                img.setImageResource(R.drawable.bleu);
            }

        });

Ici lorsque je clique, l'image verte devient bleu, mais j'aimerais qu'en recliquant elle devienne jaune, puis rouge, puis rose etc … j'avais pensé faire plusieurs public void onClick() mais ca ne fonctionne pas. J'ai pensé à appeler une fonction dans le onClick qui ferait un switch, et en fonction du nom ou de l'id de l'image, en afficherai une autre, mais je n'arrive pas à l'implémenter et je ne sais vraiment pas si c'est la bonne solution …

Voila, je désespère un peu … merci d'avance pour votre aide !

Cordialement

Coucou,

Les valeurs que tu trouves dans R.drawable sont de types int normalement (ce sont des ID correspondant aux images disponibles dans le répertoire drawable). Du coup, je pense que le plus simple dans ton cas serait de partir plutôt sur un tableau qui contiendrait tes drawables, ainsi qu'une valeur correspondant à l'index du tableau sur lequel tu te trouves actuellement.

Je n'ai pas testé les codes ci-dessous. Ils ne sont là que pour te donner le principe :)

Ainsi, dans le préambule de la classe de ton activité, voici ce qu'il faut mettre :

1
2
protected final int imagesResources[] = { R.drawable.vert, R.drawable.bleu, R.drawable.jaune, ....... };
protected int currentImageResource = 0;

Ensuite, dans la méthode onClick() de la classe anonyme OnClickListener, il ne te reste plus qu'à mettre ceci :

1
2
currentImageResource = (currentImageResource + 1) % imagesResources.length; // le modulo permet ici de retourner à 0 lorsque currentImageResource devient égal à la taille du tableau.
img.setImageResource(imageResources[currentImageResource]);

Et voilà :)

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte