Ich arbeite an einer Android-Anwendung und habe eine Zeichnung, die ich von einem Quellbild lade. Auf diesem Bild möchte ich alle weißen Pixel in eine andere Farbe konvertieren, z. B. Blau, und dann das resultierende zeichnbare Objekt zwischenspeichern, damit ich es später verwenden kann.
Angenommen, ich habe eine 20x20-PNG-Datei mit einem weißen Kreis in der Mitte und alles außerhalb des Kreises ist transparent. Was ist der beste Weg, um diesen weißen Kreis blau zu machen und die Ergebnisse zwischenzuspeichern? Ändert sich die Antwort, wenn ich dieses Quellbild verwenden möchte, um mehrere neue Drawables zu erstellen (z. B. blau, rot, grün, orange usw.)?
Ich vermute, dass ich eine ColorMatrix irgendwie verwenden möchte, bin mir aber nicht sicher, wie.
quelle
/sillyandroid/src/main/java/me/angrybyte/sillyandroid/extras/Coloring.java
Antworten:
Ich denke, Sie können tatsächlich nur verwenden
Drawable.setColorFilter( 0xffff0000, Mode.MULTIPLY )
. Dies würde weiße Pixel auf Rot setzen, aber ich glaube nicht, dass dies die transparenten Pixel beeinflussen würde.Siehe Drawable # setColorFilter
quelle
Drawable.mutate().setColorFilter( 0xffff0000, Mode.MULTIPLY)
Weitere Informationen: neugierig-creature.org/2009/05/02/drawable-mutationssetColorFilter
jedes Mal aufrufen, wenn wir die Symbole verwenden, anstatt Selektoren mit unterschiedlichen Farbtönen zu haben. Trotzdem ist es eine viel bessere Lösung, als PNGs direkt zu bearbeiten und zusätzliche statische Assets zu haben.SRC_IN
myImage.getDrawable().mutate().setColorFilter(getResources().getColor(R.color.icon_grey), PorterDuff.Mode.SRC_IN);
Probieren Sie diesen Code aus:
quelle
Ich weiß, dass diese Frage schon lange vor Lollipop gestellt wurde, aber ich möchte eine nette Möglichkeit hinzufügen, dies auf Android 5. + zu tun. Sie machen eine XML-Zeichnung, die auf die ursprüngliche verweist, und setzen die Farbe wie folgt darauf:
quelle
Die neue Unterstützung v4 bringt den Farbton zurück zu API 4.
Sie können es so machen
quelle
Wenn Sie eine Zeichenfläche haben, die einfarbig ist, und Sie sie in eine andere einfarbige Farbe ändern möchten, können Sie eine verwenden
ColorMatrixColorFilter
. Die Transparenz bleibt erhalten.quelle
int iColor = ContextCompat.getColor(context, R.color.primary);
.Ich benutze auch
ImageView
für Symbole (imListView
oder Einstellungsbildschirm). Aber ich denke, es gibt einen viel einfacheren Weg, das zu tun.Verwenden Sie
tint
diese Option , um die Farbüberlagerung für das ausgewählte Symbol zu ändern.In XML,
funktioniert gut, da es von kommt
AppCompat
quelle
Sie sollten dies für alle APIs tun:
quelle
ColorFilter filter = new LightingColorFilter(Color.BLACK, Color.LTGRAY);
die beiden Parameter im LightingColorFilter unterschiedlich sind, z. B. ändert sich Schwarz in Grau im Zeichenobjekt.Ich konnte dies mit dem folgenden Code tun, der aus einer Aktivität stammt (das Layout ist sehr einfach, enthält nur eine ImageView und wird hier nicht veröffentlicht).
quelle
Sie können es mit kompatiblen Bibliotheken für Android-Unterstützung lösen. :) :)
quelle
mutate()
Aufruf erforderlich, um den Farbton eines Drawables ändern zu können, ohne alle mit dieser Ressourcen-ID verknüpften Drawables zu ändern.In Ihrer Aktivität können Sie Ihre PNG-Bildressourcen mit einer einzigen Farbe tönen:
Wenn Sie jetzt das R.drawable. * Verwenden, sollte es mit dem gewünschten Farbton gefärbt sein. Wenn Sie zusätzliche Farben benötigen, sollten Sie in der Lage sein, das Zeichenobjekt zu mutieren ().
quelle
Danke an @sabadow
quelle
Wenn Sie Ihr Drawable auf ImageView eingestellt haben, können Sie dies mit einem 1-Liner tun:
quelle
Schauen Sie sich diesen Beispielcode " ColorMatrixSample.java " an.
Die entsprechende API finden Sie hier :
quelle
Dies funktioniert mit allem mit Hintergrund:
Textansicht, Button ...
quelle
Dieses Code-Snippet hat bei mir funktioniert:
quelle
Es gibt so viele Lösungen, aber niemand hat vorgeschlagen, wenn die XML- Datei der Farbressource bereits Farbe hat, können wir direkt von dort auch wie folgt auswählen:
quelle
Kurzes Beispiel zum Ändern der Zeichenfarbe je nach
isWorking
Feld.Meine Form xml:
Meine Methode zu ändern:
Anwendungsbeispiel:
quelle
in XML /res/values/color.xml
Java Code
quelle
Zu spät, aber falls jemand es braucht:
quelle
Es funktioniert für einige einfache Drawables. Ich habe es auf einer einfachen einfarbigen, geraden Form mit abgerundeten Ecken verwendet und musste diese Farbe mit verschiedenen Layouts ändern.
Versuche dies
quelle
Es ist sehr, sehr einfach, wenn Sie eine Bibliothek verwenden, um dies für Sie zu tun. Versuche dies Bibliothek aus
Sie können so anrufen:
quelle