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...
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...
UPDATE:
@ADev hat in seiner Antwort hier eine neuere Lösung, aber seine Lösung erfordert eine neuere Support-Bibliothek - 25.4.0 oder höher.
Sie können die Farbschattierung ganz einfach im Code ändern über:
imageView.setColorFilter(Color.argb(255, 255, 255, 255));
// Weiße Schattierung
Wenn Sie Farbschattierung wünschen, dann
imageView.setColorFilter(ContextCompat.getColor(context, R.color.COLOR_YOUR_COLOR), android.graphics.PorterDuff.Mode.MULTIPLY);
Für Vektorgrafiken
imageView.setColorFilter(ContextCompat.getColor(context, R.color.COLOR_YOUR_COLOR), android.graphics.PorterDuff.Mode.SRC_IN);
Die meisten Antworten beziehen sich auf die Verwendung von setColorFilter
, was nicht das ist, was ursprünglich gefragt wurde.
Der Benutzer @Tad hat seine Antwort in die richtige Richtung, aber es funktioniert nur auf API 21+.
Um den Farbton auf allen Android-Versionen einzustellen, verwenden Sie den ImageViewCompat
:
ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(yourTint));
Beachten Sie, dass yourTint
in diesem Fall ein "Farbint" sein muss. Wenn Sie einen Farbressource wie R.color.blue
haben, müssen Sie zuerst das Farbint laden:
ContextCompat.getColor(context, R.color.blue);
@Hardik hat Recht. Der andere Fehler in deinem Code liegt darin, wenn du auf deine XML-definierte Farbe verweist. Du hast nur die ID an die Methode setColorFilter
übergeben, wenn du die ID verwenden solltest, um die Farbressource zu finden, und die Ressource an die Methode setColorFilter
weiterzugeben. Dein ursprünglicher Code wird unten neu geschrieben.
Wenn diese Zeile innerhalb deiner Aktivität ist:
imageView.setColorFilter(getResources().getColor(R.color.blue), android.graphics.PorterDuff.Mode.MULTIPLY);
Ansonsten musst du auf deine Hauptaktivität verweisen:
Aktivität main = ...
imageView.setColorFilter(main.getResources().getColor(R.color.blue), android.graphics.PorterDuff.Mode.MULTIPLY);
Beachte, dass dies auch für andere Arten von Ressourcen wie Integer, Booleans, Dimensionen usw. gilt. Mit Ausnahme von Strings, für die du in deiner Aktivität direkt getString()
verwenden kannst, ohne zuerst getResources()
aufrufen zu müssen (frag mich nicht warum).
Ansonsten sieht dein Code gut aus. (Obwohl ich die Methode setColorFilter
nicht zu sehr untersucht habe...)
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.