2013-06-19 14 views

Odpowiedz

31

Użyj tego

String hexColor = String.format("#%06X", (0xFFFFFF & intColor)); 

Znamy długość wartości koloru w HEX to 6. Więc widzisz 6 tutaj. % 06X dopasowuje wynik pochodzący z (0xFFFFFF & intColor), a jeśli długość jest mniejsza niż 6, daje wynik 6 przez dodanie ZERO do lewej strony wyniku. Widzisz #, więc to # char zostanie dodane do wyniku, a na końcu otrzymasz wartość HEX COLOR.

+0

Czy mógłbyś wyjaśnić kod w nawiasach? – Marek

+0

Pytasz o '(0xFFFFFF i intColor)'? Jeśli tak, to zamieni wartość int na hex. –

+0

Jestem bardziej zainteresowany "#% 06X". Jest to wyrażenie regularne, którego zupełnie nie rozumiem. Czy mógłbyś to wyjaśnić? – Marek

1

RGB używa formatu liczb dziesiętnych w formacie szesnastkowym. jeśli masz wartość całkowitą, przekonwertuj ją na hexa.

46

Co okazały się być najprostszym i najlepszym rozwiązaniem dla mnie było bezpośrednio użyć klasy koloru w następujący sposób:

int red = Color.red(intColor); 
int green = Color.green(intColor); 
int blue = Color.blue(intColor); 

ten sposób mogłem już do czynienia z wartościami całkowitymi bez konieczności obsługi ciągów. Jeśli z drugiej strony ciąg znaków reprezentujący kolor rgb jest tym, czego potrzebujesz, odpowiedź Pankaja Kumara jest najlepsza. Mam nadzieję, że jest to przydatne dla kogoś.

+0

To jest świetne. Dzięki – cxphong

+1

Składnia mogła się zmienić. O ile nie ma stałej klasy kolorów, której nie jestem świadomy: 'new Color (intColor) .getRed();' –

+0

Nie mam pojęcia ... Nie pracuję teraz nad Androidem od dość dawna. Jeśli jesteś tego pewien, możesz edytować moją odpowiedź przy pomocy tych informacji, być może nawet z wersją, w której ta zmiana się zdarzyła. –

0

Od SDK 26 you can just use

Color c = Color.valueOf(colorInt); 

poza tym nie wydaje się możliwe, aby utworzyć instancję kolor z dowolnego argB. Kod źródłowy korzysta z prywatnego konstruktora:

/** 
* Creates a new <code>Color</code> instance from an ARGB color int. 
* The resulting color is in the {@link ColorSpace.Named#SRGB sRGB} 
* color space. 
* 
* @param color The ARGB color int to create a <code>Color</code> from 
* @return A non-null instance of {@link Color} 
*/ 
@NonNull 
public static Color valueOf(@ColorInt int color) { 
    float r = ((color >> 16) & 0xff)/255.0f; 
    float g = ((color >> 8) & 0xff)/255.0f; 
    float b = ((color  ) & 0xff)/255.0f; 
    float a = ((color >> 24) & 0xff)/255.0f; 
    return new Color(r, g, b, a, ColorSpace.get(ColorSpace.Named.SRGB)); 
} 
Powiązane problemy