wake-up-neo.com

Anwenden von ColorFilter auf ImageView mit ShapedDrawable

Ich habe eine ImageView mit Android:src, die auf eine ShapedDrawable eingestellt ist, nämlich einen weißen Kreis. Was ich möchte, ist, diese ImageView in der Laufzeit zu kolorieren, die auf einige Ereignisse reagiert. imgView.setColorFilter scheint eine Lösung zu sein, aber nach Verwendung dieser Parameter (verschiedene Parameter versucht) wird das Bild unsichtbar (ich sehe es nicht auf dem Bildschirm).

Wie löse ich das? Und gibt es bessere Möglichkeiten, Farbkreise zu haben?

36
aplavin

Okay, ich hatte ein kurzes Spiel damit und bemerkte, dass die Frage der Kreise verschwand. Ohne dass Sie what genau beschrieben haben, als Sie es genau versucht haben, nehmen Sie an, Sie haben noch nicht versucht, den Farbfilter auf Drawable selbst einzustellen. (Im Gegensatz zu ImageView, das nur mit BitmapDrawables zu funktionieren scheint).

Die folgenden Anweisungen funktionieren perfekt für ein mit xml deklariertes ShapeDrawable mit Weiß als Ausgangsfarbe:

ImageView redCircle = (ImageView) findViewById(R.id.circle_red_imageview);
ImageView greenCircle = (ImageView) findViewById(R.id.circle_green_imageview);
ImageView blueCircle = (ImageView) findViewById(R.id.circle_blue_imageview);

// we can create the color values in different ways:
redCircle.getDrawable().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY );
greenCircle.getDrawable().setColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY );
blueCircle.getDrawable().setColorFilter(getResources().getColor(R.color.blue), PorterDuff.Mode.MULTIPLY );

Das ShapeDrawable zur Vollständigkeit: (Ich setze die Größe des ImageView, siehe unten)

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="oval" >
    <solid Android:color="@Android:color/white" />
</shape>

Und eines der ImageViews als Beispiel:

<ImageView
    Android:id="@+id/circle_red_imageview"
    Android:layout_width="40dp"
    Android:layout_height="40dp"
    Android:padding="5dp"
    Android:src="@drawable/circle_white" />

Visuelles Ergebnis:

Screenshot of colored circles

99
MH.

Wenn Sie die Bildfarbe ändern möchten, verwenden Sie 

PorterDuff.Mode.SRC_ATOP instead
PorterDuff.Mode.MULTIPLY

im obigen Beispiel.

12

Sie können das Attribut Android:tint in ImageView in XML verwenden.

Beispiel:

<ImageView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:src="@drawable/your_drawable"
    Android:tint="@color/your_color" />

Getestet auf Android 4.1.2 und 6.0.1

6

Sie können dies sehr einfach mit dieser Bibliothek tun: https://github.com/jrvansuita/IconHandler

Es wird so funktionieren:

Icon.on(yourImageView).color(R.color.your_color).icon(R.mipmap.your_icon).put();
0
Vansuita Jr.