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 sourceCes 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.
Omg, merci beaucoup! 'SRC_ATOP' a fonctionné! – ForceMagic
Vous êtes les bienvenus, j'ajoute un lien vers la documentation pour plus d'explications :) – Cochi