web-dev-qa-db-fra.com

je veux ajouter un filtre de couleur à l'imageview

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 ....

21

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);
29
Shashank Degloorkar

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" />
7
Md Imran Choudhury

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.

6
Thomas

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);
4
L. G.