Je travaille sur une application Android et j'ai un dessin que je charge à partir d'une image source. Sur cette image, j'aimerais convertir tous les pixels blancs en une couleur différente, par exemple le bleu, puis mettre en cache l'objet Drawable résultant afin de pouvoir l'utiliser plus tard.
Par exemple, disons que j'ai un fichier PNG 20x20 qui a un cercle blanc au milieu et que tout ce qui est en dehors du cercle est transparent. Quelle est la meilleure façon de transformer ce cercle blanc en bleu et de mettre en cache les résultats? La réponse change-t-elle si je veux utiliser cette image source pour créer plusieurs nouveaux Drawables (disons bleu, rouge, vert, orange, etc.)?
Je suppose que je veux utiliser un ColorMatrix d'une manière ou d'une autre, mais je ne sais pas comment.
la source
/sillyandroid/src/main/java/me/angrybyte/sillyandroid/extras/Coloring.java
Réponses:
Je pense que vous pouvez simplement utiliser
Drawable.setColorFilter( 0xffff0000, Mode.MULTIPLY )
. Cela mettrait les pixels blancs en rouge mais je ne pense pas que cela affecterait les pixels transparents.Voir Drawable # setColorFilter
la source
Drawable.mutate().setColorFilter( 0xffff0000, Mode.MULTIPLY)
plus d'infos: curious-creature.org/2009/05/02/drawable-mutationssetColorFilter
chaque fois que nous utilisons les icônes au lieu d'avoir des sélecteurs avec des teintes de couleurs différentes. Pourtant, c'est une bien meilleure solution que de modifier directement les pngs et d'avoir des actifs statiques supplémentaires.SRC_IN
:myImage.getDrawable().mutate().setColorFilter(getResources().getColor(R.color.icon_grey), PorterDuff.Mode.SRC_IN);
Essayez ce code:
la source
Je sais que cette question a été posée bien avant Lollipop mais je voudrais ajouter une belle façon de le faire sur Android 5. +. Vous créez un dessin XML qui fait référence à l'original et définissez la teinte comme ceci:
la source
Le nouveau support v4 ramène la teinte à l'API 4.
tu peux le faire comme ça
la source
Si vous avez un dessinable de couleur unie et que vous souhaitez le changer en une couleur unie différente, vous pouvez utiliser un
ColorMatrixColorFilter
. La transparence est préservée.la source
int iColor = ContextCompat.getColor(context, R.color.primary);
.J'utilise également
ImageView
des icônes (dansListView
ou écran des paramètres). Mais je pense qu'il existe un moyen beaucoup plus simple de le faire.Utilisez
tint
pour modifier la superposition de couleurs sur l'icône sélectionnée.En xml,
fonctionne bien car il vient de
AppCompat
la source
Vous devez le faire pour toutes les API:
la source
ColorFilter filter = new LightingColorFilter(Color.BLACK, Color.LTGRAY);
changeront le noir en gris dans le dessinable.J'ai pu le faire avec le code suivant, qui est tiré d'une activité (la mise en page est très simple, contenant simplement une ImageView, et n'est pas publiée ici).
la source
Vous pouvez le résoudre en utilisant les bibliothèques de compatibilité Android. :)
la source
mutate()
appel est nécessaire pour pouvoir changer la teinte d'un drawable, sans modifier tous les drawables associés à cet ID de ressource.Dans votre activité, vous pouvez colorer vos ressources d'image PNG avec une seule couleur:
Maintenant, lorsque vous utilisez le R.drawable. * Il doit être coloré avec la teinte souhaitée. Si vous avez besoin de couleurs supplémentaires, vous devriez pouvoir .mutate () le dessinable.
la source
Merci à @sabadow
la source
Si vous avez votre ensemble dessinable sur ImageView, vous pouvez le faire avec une doublure:
la source
Découvrez cet exemple de code " ColorMatrixSample.java "
L'API correspondante est disponible ici :
la source
Cela fonctionne avec tout ce qui a un arrière-plan:
Affichage de texte, bouton ...
la source
Cet extrait de code a fonctionné pour moi:
la source
Il y a tellement de solutions mais personne n'a suggéré que si le fichier xml de ressource couleur a déjà une couleur, nous pouvons choisir directement à partir de là aussi comme ci-dessous:
la source
Petit exemple pour changer la couleur de dessin selon
isWorking
champ.Ma forme xml:
Ma méthode pour changer:
Exemple d'utilisation:
la source
en XML /res/values/color.xml
Code Java
la source
Trop tard mais au cas où quelqu'un en aurait besoin:
la source
Cela fonctionne pour certains drawables simples. Je l'ai utilisé sur une simple forme rect en couleur unie avec des coins arrondis et j'avais besoin de changer cette couleur avec différentes dispositions.
Essaye ça
la source
C'est très très simple lorsque vous utilisez une bibliothèque pour le faire pour vous. Essayez cette bibliothèque
Vous pouvez appeler comme ceci:
la source