1

J'ai besoin de 3 icônes: ContextCompat.getDrawable(this, R.drawable.my_vector_drawable).Android: Teinte l'une des trois icônes

Première - sans teinte, seconde - avec une teinte, troisième - sans teinte aussi,

Ok.

 ImageView img1 = (ImageView) findViewById(R.id.img1); 
     ImageView img2 = (ImageView) findViewById(R.id.img2); 
     ImageView img3 = (ImageView) findViewById(R.id.img3); 

     Drawable drawable1 = ContextCompat.getDrawable(this, R.drawable.my_vector_drawable); 

     Drawable drawable2 = DrawableCompat.wrap(ContextCompat.getDrawable(this, R.drawable.my_vector_drawable)); 
     DrawableCompat.setTintMode(drawable2, PorterDuff.Mode.MULTIPLY); 
     DrawableCompat.setTintList(drawable2, ContextCompat.getColorStateList(this, R.color.menu_tint_colors)); 

     Drawable drawable3 = ContextCompat.getDrawable(this, R.drawable.my_vector_drawable); 

     img1.setImageDrawable(drawable1); 
     img2.setImageDrawable(drawable2); 
     img3.setImageDrawable(drawable3); 

R.drawable.my_vector_drawable est une figure blanche.

Mais comme résultat - 3 icônes avec la teinte (POURQUOI?!).

Par exemple, j'ai essayé de régler ContextCompat.getColor(this, R.color.somecolor), et le résultat est ... Deux icônes avec une teinte! Icône 2 et 3, et première icône - sans teinte (Pourquoi ?!)

Comment charger PAS mis en cache drawable? Ou comment résoudre ce problème? AppCompat 23.4. +

Répondre

2

Vous devez vos drawables.

Maintenant, vous faites référence à la même source exacte. Dès que vous muter votre dessinable, chacun aura son propre état.

Drawable d = ContextCompat.getDrawable(this, R.drawable.my_vector_drawable).mutate(); 

De docs:

Faire ce drawable mutable. Cette opération ne peut pas être inversée. Un dessinable mutable est garanti de ne pas partager son état avec tout autre dessinable. Ceci est particulièrement utile lorsque vous devez modifier les propriétés des tirages chargés à partir des ressources. Par défaut, toutes les instances drawables chargées à partir de la même ressource partagent un état commun; Si vous modifiez l'état d'une instance, toutes les autres instances recevront la même modification. L'appel de cette méthode à un mutable Drawable n'aura aucun effet.

+0

Oh, vous avez raison, j'ai oublié cette méthode! Je vous remercie! – VKDev