Jump to content
Sign in to follow this  
Alessandro

OptionsMenu et Canvas

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

Share this post


Link to post
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....

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

J'ai pas vraiment compris ce que tu souhaite faire ... mais je pense que y'a beaucoup plus simple!

Tu veux changer la couleur des cellules du menu? Si oui, il suffit de changer le style de ces menus

Share this post


Link to post
Share on other sites

dans ton menu tu peux accéder au this de ton activity par NomActivity.this, ..... ca devrait aider pour le invalidate.

--

Posté depuis BBFoC HTC Magic/sapphire

Share this post


Link to post
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()).

Share this post


Link to post
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

Share this post


Link to post
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
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.

Sign in to follow this  





×
×
  • Create New...