je veux ajouter un filtre couleur à l'imageview

j'aimerais ajouter un ColorFilterImageView.

actuellement j'utilise:

ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);

j'ai coché plusieurs Modes dans PotterDuffSRC_IN,SRC etc. mais je ne vois aucune différence dans les modes... Tout le mode se tourne l'ensemble de l' ImageView en parfait couleur Rouge.

je dois mélanger la couleur rouge dans l'image existante de sorte que l'image aura l'air avec une teinte rougeâtre....

21
demandé sur Sufian 2011-11-19 14:35:57

5 réponses

La bonne façon de le faire est 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
répondu Shashank Degloorkar 2015-09-13 07:02:02

Cela a fonctionné pour moi:

dans res/couleurs.xml:

<color name="highlight_color_filter">#A5FF0000</color>

dans votre activité initialiser le filtre et surligner la peinture:

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 à l'ImageView:

ImageView iv=(ImageView)findViewById(ResIdOfImageToFilter);
iv.setColorFilter(redHighLight);

si cela ne fonctionne pas, essayez d'appliquer au drawable ImageView:

iv.getDrawable().setColorFilter(redHighLight);

j'espère que vous aide.

6
répondu Thomas 2011-11-19 14:43:17

Vous pouvez utiliser androïde: teinte (lien) 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" />
6
répondu Md Imran Choudhury 2017-01-01 07:56:24

autre solution, vous auriez pu garder PorterDuff.Mode.SRC_ATOP mode et utiliser un autre alpha pour avoir 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
répondu L. G. 2017-09-05 11:09:40

dans votre fichier xml vous pouvez utiliser teinte Par exemple

        <ImageView
            android:id="@+id/scrachImage_1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:tint="@color/colorAccent"
            android:src="@drawable/eagle" />

si vous voulez ajouter un filtre couleur par programmation, utilisez

scratchImage_2.setColorFilter(Color.BLACK);

vous pouvez également supprimer ce filtre couleur en utilisant ce code:

scratchImage_2.setColorFilter(null);

0
répondu Md.Tarikul Islam 2017-07-30 05:22:59