2017-05-31 3 views
0

Ich arbeite an einer Android-App, die über einen integrierten Benutzeroberflächen-Customizer verfügt. Der Benutzeroberflächen-Customizer ermöglicht dem Benutzer, verschiedene Farben in der App zu ändern, z. B. die Farbe der Symbolleiste/Aktionsleiste. Wenn Sie bei Google Material Design-Spezifikationen eine Farbe auf this pallete als Ihre Symbolleisten-/Aktionsleistenfarbe haben, sollte die Farbe zwei Zeilen darunter die Statusleistenfarbe sein (für Geräte, die dies unterstützen). Wenn Sie beispielsweise die Farbe #3F51B5 in der Kategorie Indigo auswählen, sollte die Farbe #303F9F die Farbe der Statusleiste sein.Berechnen von Materialfarben

Also die Farbauswahl verwendet einen Standardwert in Form der obigen Farben (#303F9F), aber der Farbwähler gibt einen Wert in Ganzzahl zurück.

Für Farb #3F51B5, es ist äquivalent ganzzahliger Wert ist und -12627531 Farbe #303F9F ‚s äquivalenter ganzzahliger Wert ist -13615201.

Im Wesentlichen möchte ich, dass meine App den Benutzer die Grundfarbe auswählen lässt und die dunklere Komplementärfarbe automatisch generiert. Ich habe versucht, von der ersten Farbe 987670 zu subtrahieren, um die zweite Farbe zu erhalten, aber es funktioniert nur für die Farben, die ich spezifizierte, nicht irgendeine Farbe.

Wie gehe ich vor, um automatisch eine Farbe zu erzeugen, die zwei Farbtöne dunkler ist? Ich bin nicht sicher, ob dies berücksichtigt werden muss, aber vielleicht könnte die Methode auch erkennen, ob es eine Farbe aus der Farbpalette oben oder nur eine zufällige Farbe ist, und wenn es aus der Farbpalette ist, dann könnte ich alles fest einprogrammieren die Werte (nicht wirklich gewünschte Lösung) und die zufällige Farbe könnten einfach einen Pseudo-Code verwenden, um eine dunklere Schattierung zu erzeugen.

Irgendwelche Ideen?

+0

Mögliche Duplikat [Material Design Farbpalette] (https://stackoverflow.com/ Fragen/32942503/Material-Design-Farbpalette) –

Antwort

1

können Sie die folgende Methode verwenden, um eine dunklere Grundfarbe zu erhalten:

/** 
* Darkens a color by a given factor. 
* 
* @param color 
*  the color to darken 
* @param factor 
*  The factor to darken the color. 
* @return darker version of specified color. 
*/ 
@ColorInt public static int darker(@ColorInt int color, @FloatRange(from = 0.0, to = 1.0) float factor) { 
    return Color.argb(Color.alpha(color), 
     Math.max((int) (Color.red(color) * factor), 0), 
     Math.max((int) (Color.green(color) * factor), 0), 
     Math.max((int) (Color.blue(color) * factor), 0) 
); 
} 

Beispiel:

int primaryDark = darker(primaryColor, 0.85f);