2017-08-12 3 views
0

Préambule

Je travaille depuis une demi-heure maintenant, et il me semble qu'il me manque vraiment quelque chose d'important.Comment régler la teinte d'ImageView sous (Extensible) ListAdapter?

Note: J'ai déjà essayé les solutions pour ces questions

How to change color of vector drawable path on button click
How to set tint for an image view programmatically in android?
Changing ImageView source

Ces solutions soit recolorer ALL ImageView ou SRCs ils ne le font pas quoi que ce soit (le vecteur reste noir).

Mon drawable est un atout de vecteur à partir du répertoire des icônes de matériel:

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:width="24dp" 
    android:height="24dp" 
    android:viewportWidth="24.0" 
    android:viewportHeight="24.0"> 

    <path 
     android:fillColor="#FF000000" 
     android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2z" /> 
</vector> 

Mon ImageView:

<ImageView 
     android:id="@+id/gradeBullet" 
     android:layout_width="25dp" 
     android:layout_height="25dp" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginStart="25.5dp" 
     android:layout_marginTop="25.5dp" 
     app:srcCompat="@drawable/importantgrade" /> 

je voudrais le faire avec * Compat, parce que je aussi aime prendre en charge les API antérieures (API> 17).

Mon ImageView: ImageView gradeBullet = convertView.findViewById(R.id.gradeBullet);

Essayez I.

MyAmazingAdapter.java - getChildView(...)

gradeBullet.setColorFilter(ContextCompat.getColor(context, gradeObj.colorId), PorterDuff.Mode.MULTIPLY); 

Résultat: Ne fait rien.

Essayez II.

MyAmazingAdapter.java - getChildView(...)

DrawableCompat.setTint(gradeBullet.getDrawable(), ContextCompat.getColor(context, R.color.myColor)); 

Résultat: recolors tout.

Essayez III.

MyAmazingAdapter.java - getChildView(...)

VectorDrawableCompat drawable = (VectorDrawableCompat) gradeBullet.getDrawable(); 
drawable.setTint(ContextCompat.getColor(context, gradeObj.colorId)); 
gradeBullet.setImageDrawable(drawable); 

Résultat: Donne une couleur bizarre. (Certainement pas ce que je veux, c'est plus proche de la couleur d'origine)

Essayez IV.

Tout ce qui précède avec un final au gradeBullet, a obtenu les mêmes résultats.

Quelques autres informations

  • Le gradeObj.colorId est différent pour chaque ChildView.
  • L'utilisation de formes et setColor au lieu de SVG est pas ce que je veux.
  • Actuellement testé avec l'API ne lvl 26
  • MyAmazingAdapter.java étend BaseExpandableListAdapter

Si vous souhaitez plus d'informations, mentionnez simplement dans un commentaire.

Répondre

1

Vous pouvez essayer votre première méthode avec PorterDuff.Mode.SRC_IN ou PorterDuff.Mode.SRC_ATOP au lieu de PorterDuff.Mode.MULTIPLY.

PorterDuff.mode

Hope this helps.

+0

Omg, merci beaucoup! 'SRC_ATOP' a fonctionné! – ForceMagic

+1

Vous êtes les bienvenus, j'ajoute un lien vers la documentation pour plus d'explications :) – Cochi