594 Stimmen

Wie kann man die Tönung für ein Bildansicht programmatisch in Android festlegen?

Müssen für ein ImageView einen Farbton einstellen... Ich benutze es auf folgende Weise:

imageView.setColorFilter(R.color.blue, android.graphics.PorterDuff.Mode.MULTIPLY);

Aber es ändert sich nicht...

10voto

Cillian Myles Punkte 686

Zur Ergänzung von ADev's Antwort (die meiner Meinung nach die korrekteste ist), aufgrund der weit verbreiteten Verwendung von Kotlin und seinen nützlichen Erweiterungsfunktionen:

fun ImageView.setTint(context: Context, @ColorRes colorId: Int) {
    val color = ContextCompat.getColor(context, colorId)
    val colorStateList = ColorStateList.valueOf(color)
    ImageViewCompat.setImageTintList(this, colorStateList)
}

Ich denke, dass diese Funktion in jedem Android-Projekt nützlich sein könnte!

8voto

Alex Lockwood Punkte 82384

Anfangend in Lollipop gibt es eine Methode namens ImageView#setImageTintList(), die Sie verwenden können... der Vorteil dabei ist, dass sie eine ColorStateList verwendet, anstatt nur eine einzige Farbe, wodurch der Tönungszustand des Bildes zustandsbewusst wird.

Auf Geräten vor Lollipop können Sie dasselbe Verhalten erzielen, indem Sie das Drawable einfärben und es dann als Bild-Drawable des ImageView setzen:

ColorStateList csl = AppCompatResources.getColorStateList(context, R.color.my_clr_selector);
Drawable drawable = DrawableCompat.wrap(imageView.getDrawable());
DrawableCompat.setTintList(drawable, csl);
imageView.setImageDrawable(drawable);

6voto

Pawan asati Punkte 292
Random random = new Random;
ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
ColorFilter cf = new PorterDuffColorFilter(Color.rgb(random.nextInt(255), random.nextInt(255), random.nextInt(255)), Mode.OVERLAY);

imageView.setImageResource(R.drawable.ic_bg_box);
imageView.setColorFilter(cf);

4voto

Ujjwal Jung Thapa Punkte 548

In Java benutze ich

imageView.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(context, R.color.red)));

3voto

Vikash Sharma Punkte 539

Verwenden Sie nicht PoterDuff.Mode, Verwenden Sie setColorFilter(), es funktioniert für alles.

ImageView imageView = (ImageView) listItem.findViewById(R.id.imageView);
imageView.setColorFilter(getContext().getResources().getColor(R.color.msg_read));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X