[Android] Composer des drawables

Voilà, un problème simple: je cherche à faire du compositing avec deux drawables et afficher le tout en background d’un bouton.

J’arrive déjà à changer de background de bouton à la volée (encore heureux), mais pour le compositing de drawables (superposer une image sur une autre), je ne trouve pas comment m’y prendre.

Monsieur_Max, au secouuuuuuuuuurs.
[center]
[/center]

Allez j’assume la réponse pas du tout utile et mon niveau de merde avec paint.net mais j’ai la flemme de bosser:
[center][/center]
:smiley:

Twin> euuuuh, j’arrive pas bien à piger en fait, mais c’est probablement parce que je suis nul :smiley:
Tu pourrais préciser si tu fais joujou avec une View classique ou une SurfaceView ?

edit :
Bon pour préciser un peu, j’ai refléchi un poil.
Un Drawable ( plus particulièrement un bitmap drawable ) contient une référence à un objet Bitmap et un seul.
Donc pour « composer » tu vas être obligé de fabriquer un bitmap avec tes 2 bitmaps puis utiliser ce bitmap pour instancier ton drawable.

Le problème c’est que la manipulation d’image conduit très rapidement un dépassement des 16 pauvres petits Mo de la VM. ( en tout cas sous la 1.5 )
L’idée serait donc de te fabriquer ton propre composant, Bouton, avec 2 drawables qui se dessinent, mais ça, c’est dans le cas d’une SurfaceView où tu bosses avec tes bits et ton couteau.
Pour les composants UI classiques, je ne pourrais pas t’aider malheureusement, je n’y ai pas du tout touché.

Pour info, dans Pocoro ( ouais pub pub yeah ! ), les boutons sont des composants persos avec un NinePatch et des tas de constructeurs pour coller un icone et donner la taille voulu au truc.
Avertissement, le dessinnage des NinePatchs est pas du tout optimisé, à éviter si c’est pour afficher dans un jeu.

En fait j�??ai juste un Button sur lequel j�??appelle setBackground() en lui passant un Drawable.
C�??est un peu comme si tu avait un échiquier dont chaque case serait un bouton. Quand la case est vide, le bouton est transparent. Quand la case contient une pièce, le background du bouton est l�??image (Drawable) correspondant à cette pièce.

Quand le joueur sélectionne une pièce avant de la jouer, je voudrait « highlighter » le boutton. En lui ajoutant une bordure par exemple. D�??où mon envie de composer des drawable, ce qui n�??est visiblement pas une bonne idée…

(là raison pour laquelle j�??utilise des boutons est que c�??est plus rapide à faire comme ça :D)

[quote=« Twin, post:4, topic: 50121 »]En fait j�??ai juste un Button sur lequel j�??appelle setBackground() en lui passant un Drawable.
C�??est un peu comme si tu avait un échiquier dont chaque case serait un bouton. Quand la case est vide, le bouton est transparent. Quand la case contient une pièce, le background du bouton est l�??image (Drawable) correspondant à cette pièce.

Quand le joueur sélectionne une pièce avant de la jouer, je voudrait « highlighter » le boutton. En lui ajoutant une bordure par exemple. D�??où mon envie de composer des drawable, ce qui n�??est visiblement pas une bonne idée…

(là raison pour laquelle j�??utilise des boutons est que c�??est plus rapide à faire comme ça :D)[/quote]
Mon conseil, à voir si c’est possible avec une View standard ( pas une SurfaceView ), tu surcharges ta classe bouton en lui collant x bitmapdrawable que tu gèneres d’avance et suivant l’evenement tu choisis le bitmap correspondant.
Globalement, il faut coder assez salement.
Un bon dev veut tout faire en dynamique, faire bosser au max la machine pour des taches récurrentes.
Mais là, on a une toute petite plateforme, il faut lui simplifier la tâche. C’est pas moi qui le dit, c’est Romain Guy : « il faut apprendre à ne pas coder très propre ».
Après moults tests, tu comprends que c’est effectivement une bonne solution :smiley:

Sinon, si tu veux tripoter un jeu plus dynamique, plus graphique, je te conseille de jeter un oeil sur la surfaceView et l’exemple du SDK LunarLander.
J’ai construit mon framework en partant de là, en nettoyant au fur et à mesure et maintenant c’est nickel et très réutilisable.