J'aimerais ajouter ColorFilter
à ImageView
.
Actuellement, j'utilise:
ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
J'ai vérifié plusieurs modes dans PotterDuff
tels que SRC_IN
, SRC
etc., mais je n'obtiens aucune différence dans aucun des modes ... Tous les modes transforment toute la ImageView
en couleur rouge parfaite.
Je dois mélanger la couleur ROUGE dans l'image existante pour que l'image ait une teinte REDDISH ....
La bonne façon de le faire était d'utiliser PorterDuff.Mode.LIGHTEN
.
Donc, le code mis à jour sera comme:
ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.LIGHTEN);
Vous pouvez utiliser Android: teinte ( link ) dans votre fichier xml. Exemple:
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/your_drawable"
Android:tint="@color/your_color" />
Cela a fonctionné pour moi:
dans res/colors.xml:
<color name="highlight_color_filter">#A5FF0000</color>
dans votre activité, initialisez le filtre et mettez en surbrillance Paint:
int highlightColor = context.getResources().getColor(R.color.highlight_color_filter);
PorterDuffColorFilter colorFilter = new PorterDuffColorFilter(highlightColor, PorterDuff.Mode.SRC_ATOP);
Paint redHighLight = new Paint();
redHighLight.setColorFilter(targetHitFilter);
redHighLight.setAlpha(190);
puis appliquez le filtre à ImageView:
ImageView iv=(ImageView)findViewById(ResIdOfImageToFilter);
iv.setColorFilter(redHighLight);
si cela ne fonctionne pas, essayez d’appliquer à ImageView drawable:
iv.getDrawable().setColorFilter(redHighLight);
j'espère que cela pourra aider.
Autre solution, vous auriez pu conserver le mode PorterDuff.Mode.SRC_ATOP
et utiliser un autre alpha pour obtenir une couleur transparente.
J'utilise 155 comme valeur alpha:
final int semiTransparentGrey = Color.argb(155, 185, 185, 185);
drawable.setColorFilter(semiTransparentGrey, PorterDuff.Mode.SRC_ATOP);