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);
Stacksonstacks
quelle
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)
Enrichman
quelle
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));
JpCrow
quelle
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

KREUZRITTER
quelle
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!

BertKing
quelle
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

HpTerm
quelle
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));
Rohit Singh
quelle