Erstellen Sie eine neue Farbe zum Zeichnen


77

Ich versuche, einen Hex-Wert in einen Int-Wert umzuwandeln, damit ich eine neue Farbe zum Zeichnen erstellen kann. Ich bin mir nicht sicher, ob dies möglich ist, aber laut Dokumentation sollte es so sein. Es fragt eindeutig nach

public ColorDrawable (int color)

In API-Ebene 1 hinzugefügt Erstellt ein neues ColorDrawable mit der angegebenen Farbe.

Parameter Farbe Die zu zeichnende Farbe.

Mein Code funktioniert also nicht, weil ich einen ungültigen int: "FF6666" -Fehler erhalte. Irgendwelche Ideen?

int decode = Integer.decode("FF6666");
ColorDrawable colorDrawable = new ColorDrawable(decode);

Wenn eine der angegebenen Antworten Ihre Antwort gelöst hat, sollten Sie sie als akzeptierte Antwort validieren, damit die andere weiß, dass Ihr Problem gelöst ist.
HpTerm

Es gibt eine nette Dienstprogrammklasse android.graphics.Color, die eine Methode parseColor hat. Versuchen Sie es stattdessen und vergessen Sie nicht, das scharfe (#) Präfix an Ihre Farbstrangdarstellung anzuhängen, z. B. # FF6666
Комаров

Antworten:


163

Da Sie über Hex sprechen, müssen Sie mit 0xder Deckkraft beginnen und diese nicht vergessen.

Also im Grunde: 0xFFFF6666

ColorDrawable cd = new ColorDrawable(0xFFFF6666);

Sie können auch eine neue Datei colours.xml in / res erstellen und die Farben wie folgt definieren:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="mycolor">#FF6666</color>
</resources>

und erhalten Sie einfach die in R.color.mycolor definierte Farbe

getResources().getColor(R.color.mycolor)

18
Was ich brauchte, ist new ColorDrawable(getResources().getColor(R.color.red)))danke
shareef

8
ContextCompat.getColor (getContext (), R.color.red) für die Kompatibilität
toshkinl

Können wir die Hintergrundfarbe ändern, indem wir diese CD verwenden, die eine Variable vom Typ colorDrawable ist

Nebenbei bemerkt können Sie ColorDrawables für Objekte verwenden, für die ein Drawable erforderlich ist, z. B. DividerItemDecoration.setDrawable (). Anstatt ein tatsächlich zeichnbares Layout zu verwenden, können Sie ein ColorDrawable übergeben, um einfach die Farbe des Teilers zu ändern.
6.

21

Um ContextCompat zu verwenden und die Farbe wiederzuverwenden, können Sie Folgendes tun:

ColorDrawable colorDrawable = new ColorDrawable(ContextCompat.getColor(this, R.color.white));

Was ist damit gemeint this?
Christian

@Christian Context
JpCrow

10

Es sollte so sein ...

ColorDrawable cd = new ColorDrawable(0xffff6666);

Hinweis Ich habe 8 Hex-Ziffern verwendet, nicht 6 Hex-Ziffern. die zur Transparenz beitragen


Sie möchten solche Werte jedoch in geeigneten 'res'-Dateien haben, die nicht fest codiert sind. Enrichman Antwort ist vollständig :)
aMiGo

Wie wird cdin Bezug auf verwendet Toast?
Azurespot

5

Um den obigen Rat zu befolgen, um eine Zusammenfassung dieser Frage zu erhalten:

  1. ColorDrawable colorDrawable = neues ColorDrawable ( Color.parseColor ("# ce9b2c")); `

  2. ColorDrawable colorDrawable = neues ColorDrawable ( 0xFFCE9B2C ); Beachten Sie, dass es 8 hexadezimale Ziffern gibt, nicht 6 hexadezimale Ziffern, was nicht funktioniert. Fall alle

  3. ColorDrawable colorDrawable = new ColorDrawable (ContextCompat.getColor (mContext, R.color.default_color));

Wählen Sie bis zu Ihnen!


Wenn ich dann eine Reihe von Farben habe?
Prinz Dholakiya

1
@DPrince , Sie können dies versuchen int color = Color.HSVToColor(new float[]{...}) und dann oben verwenden.
BertKing

4

Ich denke, Sie müssen verwenden:

public static int parseColor (String colorString)

In API-Ebene 1 hinzugefügt. Analysieren Sie die Farbzeichenfolge und geben Sie die entsprechende Farb-Int zurück. Wenn die Zeichenfolge nicht analysiert werden kann, wird eine IllegalArgumentException-Ausnahme ausgelöst. Unterstützte Formate sind: #RRGGBB #AARRGGBB rot, blau, grün, schwarz, weiß, grau, cyan, magenta, gelb, hellgrau, dunkelgrau, grau, hellgrau, dunkelgrau, aqua, fuschia, limette, kastanienbraun, marineblau, oliv, lila, Silber, blaugrün


1

Auf diese Weise habe ich eine Hex-Farbe in int konvertiert und auf einen Hintergrund einer Ansicht angewendet

Nehmen wir an, wir haben die Farbe # 8080000.

1) Umwandlung von Hex in Int

int myColor = Color.parseColor("#808000");

2) Hintergrund einstellen

view.setBackgroundColor(context.getColor(myColor));
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.