188 votes

Modifier la couleur dessinable par programme

J'essaie de changer la couleur d'une image de marqueur blanche par code. J'ai lu que le code ci-dessous devrait changer la couleur, mais mon marqueur reste blanc.

Drawable.setColorFilter( 0xffff0000, Mode.MULTIPLY )

J'ai raté quelque chose ? Existe-t-il un autre moyen de changer les couleurs de mes dessins situés dans mon dossier res ?

325voto

ρяσѕρєя K Points 51253

Essayez ceci :

Drawable unwrappedDrawable = AppCompatResources.getDrawable(context, R.drawable.my_drawable); 
Drawable wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
DrawableCompat.setTint(wrappedDrawable, Color.RED);    

L'utilisation de DrawableCompat est importante car elle fournit une rétrocompatibilité et des corrections de bogues sur les périphériques API 22 et antérieures.

154voto

amorenew Points 5003

Vous pouvez essayer ceci pour le vecteur svg dessinable

DrawableCompat.setTint(
    DrawableCompat.wrap(myImageView.getDrawable()),
    ContextCompat.getColor(context, R.color.another_nice_color)
);

35voto

shicky Points 446

Vous devrez peut-être appeler mutate() sur le dessin ou bien toutes les icônes sont affectées.

Drawable icon = ContextCompat.getDrawable(getContext(), R.drawable.ic_my_icon).mutate();
TypedValue typedValue = new TypedValue();
getContext().getTheme().resolveAttribute(R.attr.colorIcon, typedValue, true);
icon.setColorFilter(typedValue.data, PorterDuff.Mode.SRC_ATOP);

31voto

Jaydip Meghapara Points 779

Vous pouvez essayer ceci pour ImageView. en utilisant setColorFilter().

imageView.setColorFilter(ContextCompat.getColor(context, R.color.colorWhite));

22voto

MinceMan Points 1583

Une autre façon de le faire sur Lollipop, android 5.+ est de définir une teinte sur un bitmap dessinable comme ceci :

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/ic_back"
    android:tint="@color/red_tint"/>

Cela fonctionnera pour vous si vous avez un nombre limité de couleurs que vous souhaitez utiliser sur vos dessinables. Consultez mon billet de blog pour plus d'informations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X