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

14voto

android developer Punkte 111449

Versuchen Sie dies. Es sollte auf allen Android-Versionen funktionieren, die von der Support-Bibliothek unterstützt werden:

public static Drawable getTintedDrawableOfColorResId(@NonNull Context context, @NonNull Bitmap inputBitmap, @ColorRes int colorResId) {
    return getTintedDrawable(context, new BitmapDrawable(context.getResources(), inputBitmap), ContextCompat.getColor(context, colorResId));
}

public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Bitmap inputBitmap, @ColorInt int color) {
    return getTintedDrawable(context, new BitmapDrawable(context.getResources(), inputBitmap), color);
}

public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Drawable inputDrawable, @ColorInt int color) {
    Drawable wrapDrawable = DrawableCompat.wrap(inputDrawable);
    DrawableCompat.setTint(wrapDrawable, color);
    DrawableCompat.setTintMode(wrapDrawable, PorterDuff.Mode.SRC_IN);
    return wrapDrawable;
}

Sie können eine beliebige der oben genannten Methoden verwenden, um es zum Laufen zu bringen.

Weitere interessante Funktionen von DrawableCompat finden Sie in der Dokumentation unter hier.

13voto

NickUnuchek Punkte 9966

Ich habe festgestellt, dass wir den Farbwähler für das Tint-Attribut verwenden können:

mImageView.setEnabled(true);

activity_main.xml:

section_arrowup_color.xml:

13voto

Abhign01 Punkte 311

Um die Farbe eines ImageView programmgesteuert in Android festzulegen

Ich habe zwei Methoden für Android:

1)

imgView.setColorFilter(context.getResources().getColor(R.color.blue));

2)

 DrawableCompat.setTint(imgView.getDrawable(),
                     ContextCompat.getColor(context, R.color.blue));

Ich hoffe, ich konnte jemandem helfen :-)

10voto

Felix Punkte 814

Da die erste Antwort für mich nicht funktioniert hat:

// Holen Sie sich das ImageView
ImageView myImageView = (ImageView) findViewById(R.id.iv);

// colorid ist die ID einer Farbe, die in values/colors.xml definiert ist
myImageView.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.colorid)));

Dies scheint nur bei API 21+ zu funktionieren, aber für mich war das kein Problem. Sie können ein ImageViewCompat verwenden, um dieses Problem zu lösen.

Ich hoffe, ich konnte jemandem helfen :-)

10voto

Liridon Sadiku Punkte 259

Eine Erweiterungs Funktion in Kotlin, um die Einfärbung zu setzen und aufzuheben.

fun ImageView.setTint(@ColorRes color: Int?) {
  if (color == null) {
    ImageViewCompat.setImageTintList(this, null)
  } else {
    ImageViewCompat.setImageTintList(this, ColorStateList.valueOf(ContextCompat.getColor(context, color)))
}}

Verwendung: deinImageView.setTint(R.color.white) zum Setzen und zum Entfernen einfach: deinImageView.setTint(null)

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