Jump to content

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;
    } 
...

Link to comment
Share on other 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....

Link to comment
Share on other 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

Link to comment
Share on other 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()).

Link to comment
Share on other 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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...