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?
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 BitmapDrawable
s 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 ImageView
s 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:
Wenn Sie die Bildfarbe ändern möchten, verwenden Sie
PorterDuff.Mode.SRC_ATOP instead
PorterDuff.Mode.MULTIPLY
im obigen Beispiel.
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
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();