Teinte / dim drawable sur la touche

L'application que je suis en train de travailler sur utilise beaucoup de ImageViews comme des boutons. Les graphiques sur ces boutons pour utiliser le canal alpha de la fermeture de l'un des bords de la touche et de leur donner un aspect irrégulier. Actuellement, nous avons à générer des 2 graphiques pour chaque bouton 1 pour sélectionner/concentré/l'état activé et l'autre pour la valeur par défaut désactivée état) et l'utilisation d'un StateListDrawable définis dans un fichier XML pour chaque bouton.

Alors que cela fonctionne bien, il semble extrêmement peu rentable puisque tous les graphiques sélectionnés sont tout simplement teinté versions de la partie non sélectionnée boutons. Ces prendre le temps de produire (mais peu) et prennent de la place dans la finale APK. Il semble qu'il devrait y avoir un moyen facile de ce automatiquement.

La solution parfaite, il me semble, est d'utiliser ImageViews pour chaque bouton et de spécifier dans sa teinte d'attribut d'un ColorStateList. Cette approche a l'avantage qu'une seule XML ColorStateList est nécessaire pour tous les boutons (qui partagent la même teinte). Toutefois, il ne fonctionne pas. Comme mentionné ici, ImageView jette un NumberFormatException lorsque la valeur fournie à la teinte n'est rien d'autre que d'une seule couleur.

Ma prochaine tentative a été d'utiliser un LayerDrawable pour le drawable. À l'intérieur de la liste des calques, on aurait l'image d'origine au bas de la pile couverts par un semi-transparente rectangle. Il a travaillé sur les parties solides de la touche graphique. Cependant les bords, qui étaient censés être entièrement transparent, étaient maintenant de la même couleur que la couche supérieure.

Quelqu'un a rencontré ce problème avant et trouvé une solution raisonnable? Je voudrais tenir à XML des approches, mais sera probablement le code d'un simple ImageView sous-classe qui fera le nécessaire teinter dans le code.

OriginalL'auteur zienkikk | 2011-11-07