2013-06-19 25 views

risposta

31

Utilizzare questa

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

Sappiamo lunghezza del valore del colore in esadecimale è 6. Quindi, vedete qui 6. % 06X corrisponde al risultato proveniente da (0xFFFFFF & intColor) e se la lunghezza è inferiore a 6, rende il risultato con 6 aggiungendo ZERO al lato sinistro del risultato. E vedi #, quindi questo # char viene aggiunto al risultato e infine ottieni un valore HEX COLOR.

+0

Potrebbe spiegare il codice tra parentesi? – Marek

+0

Stai chiedendo di '(0xFFFFFF & intColor)'? Se sì, questo convertirà il valore int in esadecimale. –

+0

Sono più interessato a "#% 06X". È un'espressione regolare, che non capisco assolutamente. Potresti spiegarlo per favore? – Marek

1

RGB utilizza il formato numerico decimale esadecimale. se si ha un valore intero, convertirlo in hexa ,.

46

Quello che ho trovato per essere la soluzione più semplice e migliore per me era di utilizzare direttamente la classe Colore come segue:

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

questo modo ho potuto già fare con i valori interi senza dover gestire le stringhe. Se invece la stringa che rappresenta il colore rgb è ciò di cui hai bisogno, la risposta di Pankaj Kumar è la migliore. Spero che questo sia utile a qualcuno.

+0

E 'fantastico. Grazie – cxphong

+1

La sintassi potrebbe essere cambiata. A meno che non ci sia una classe Color statica di cui non sono a conoscenza: 'new Color (intColor) .getRed();' –

+0

Non ho idea ... Non ho lavorato su Android da parecchio tempo ormai. Se sei sicuro di questo, puoi modificare la mia risposta con queste informazioni, magari anche con la versione in cui è avvenuta questa modifica –

0

Da SDK 26 you can just use

Color c = Color.valueOf(colorInt); 

parte che non sembra possibile creare un'istanza Color da argb arbitraria. Il codice sottostante utilizza un costruttore privato:

/** 
* 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)); 
}