Aller au contenu

OptionsMenu et Canvas


Alessandro

Recommended Posts

Bonjour,

J'ai crée 2 lignes avec la methode OnDraw().

En suite je voudrais, par l' OptionMenu, changer les couleur des lignes.

Je sais qu'il faut utiliser la methode invalidate() pour "metre à jour le canvas" mais ou ??

Avez vous une idee ?

Merci

...
@Override
   public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

         menu.add(0, 0, 0, "lineA");
        menu.add(0, 1, 0, "lineB") ;
        return true;
    }

   @Override
   public boolean onPrepareOptionsMenu(Menu menu) {
       super.onPrepareOptionsMenu(menu);
       return true;
   }
   @Override
    public boolean onOptionsItemSelected(MenuItem item) {

            switch (item.getItemId()) {
                 case 0:
                   paintTextB.setColor(Color.GRAY);
                   PaintB.setAlpha(50);          
                     return true;
                 case 1:
                      //some...
                     return true;
         }  
        return false;
    } 
...

Lien vers le commentaire
Partager sur d’autres sites

à priori il faudrait que dans tn onDraw tu ai un truc du genre (c'est pourri mais l'idée est là):

dans ta classe:

private boolean _gray=false;

dans ton onDraw:

if(_gray){

//dessiner la ligne en gris

}else{

//dessiner la ligne en pas gris

}

et dans ton menu:

case 0:

_gray = true;

invalidate(); //du canvas ou de l'activity .. à voir

ça va rappelr la méthode onDraw qui redessinera avec la couleur choisie....

Lien vers le commentaire
Partager sur d’autres sites

Merci,

oui j'ai effectivement pensé à quelque chose comme ca...

mais le vrai problème est que je ne peux pas appeler la méthode invalidate() dans OptionsMenu() car on est de hors de la Class.

En fait c'est surtout ça ma question : comment appeler invalidate() dans OptionsMenu() ?

voilà merci

Lien vers le commentaire
Partager sur d’autres sites

Je crois que je viens de comprendre le principe voulu (merci popolbx : tes réponses m'ont aidés à comprendre).

Le problème réside, comme bien souvent chez les débutants, de la séparation entre View et Activity. Essai de bien extraire ce qui est relatif à la vue de ce qui est de l'Activity. Ensuite ça te permettra de faire un invalidate dans le code de ta vue. (Essaie aussi d'utiliser invalidate(Rect) ou invalidate(int, int, int, int) car ça sert à rien d'invalider l'inutile).

En clair ton Activity gère les bouton du menu et dès qu'il y a un clic tu notifie la vue qu'elle doit être mise à jour avec une nouvelle couleur (et faire un invalidate()).

Lien vers le commentaire
Partager sur d’autres sites

pzar contre ma réponse dépend de la façon dont tu as codé ton menu, ma solution ne fonctionne que si tu fais un truc du genre:

menu.onclick=new OnMenuClickListener(){

public truc(){

MonActivity.this.invalidate();

}

});

si tu as fait : menu.onclick=new TonListenerDefiniAilleurs();.... ça ne fonctionnera pas

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...