2011-06-30 15 views
147

tengo un número entero que se generó a partir de un android.graphics.Color¿Cómo convertir un entero de color a una cadena hexagonal en Android?

el entero tiene un valor de -16.776.961

¿Cómo puedo convertir este valor en una cadena hexadecimal con el formato #RRGGBB

En pocas palabras: quisiera salida # 0000FF de -16776961

Nota: no quiero la salida para contener un alfa y también he intentado sin éxito this example

+0

¿Cuáles son Estás tratando de establecer el color hexadecimal? Creo que hay una respuesta diferente aquí – Blundell

+0

@Blundell Estoy exportando el color a una aplicación externa. El color debe estar en este formato #RRGGBB –

+0

¿Qué ocurre con http://developer.android.com/reference/android/content/res/Resources.html#getColor(int)? Deberá pegar la url o desplazarse a getColor (int) – Blundell

Respuesta

349

La máscara se asegura de que sólo recibe RRGGBB, y el% 06X le da rellena de ceros hexagonal (siempre de 6 caracteres de largo):

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

Esto funcionó perfectamente, ¡gracias! Más fácil y más preciso que tratar de usar la subcadena en Integer.toHexString(). – Tom

+0

¿Cómo sería si lo quisiera al revés, por favor? –

+7

Me acabo de dar cuenta de que hay un método Color.parseColor (String hex) que hace exactamente lo que estoy pidiendo. –

16

Creo que he encontrado la respuesta. Este código convierte el número entero en una cadena hexadecimal y elimina el alfa.

Integer intColor = -16895234; 
String hexColor = "#" + Integer.toHexString(intColor).substring(2); 

Nota sólo utilizan este código si está seguro de que la eliminación de la alfa no afectaría nada.

+1

Si envía '0x00FFFFFF' a través de esto, se bloqueará' Color.parseColor'. – TWiStErRob

7

Esto es lo que hice

int color=//your color 
Integer.toHexString(color).toUpperCase();//upercase with alpha 
Integer.toHexString(color).toUpperCase().substring(2);// uppercase without alpha 

Gracias chicos le respuestas hizo lo

+0

La primera variante no funciona para '0x00FFFFFF' ->" FFFFFF "(sin alfa). La segunda variante no funciona para '0x00000FFF' ->" F "(bits faltantes). – TWiStErRob

+0

@TWiStErRob ¿Hiciste una solución que funciona de manera confiable para los colores con canal alfa? – Saket

+0

@Saket La variante de la respuesta superior debe: 'String.format (" #% 08X ", intColor)' – TWiStErRob

0
String int2string = Integer.toHexString(INTEGERColor); //to ARGB 
String HtmlColor = "#"+ int2string.substring(int2string.length() - 6, int2string.length()); // a stupid way to append your color 
2

Con este método Integer.toHexString, se puede tener una excepción de color desconocido para algunos colores cuando usando Color.parseColor.

Y con este método String.Format ("#% 06X", (0xFFFFFF & intColor)), si no se pierden valor alfa.

por lo que recomiendo este método:

public static String ColorToHex(int color) { 
     int alpha = android.graphics.Color.alpha(color); 
     int blue = android.graphics.Color.blue(color); 
     int green = android.graphics.Color.green(color); 
     int red = android.graphics.Color.red(color); 

     String alphaHex = To00Hex(alpha); 
     String blueHex = To00Hex(blue); 
     String greenHex = To00Hex(green); 
     String redHex = To00Hex(red); 

     // hexBinary value: aabbggrr 
     StringBuilder str = new StringBuilder("#"); 
     str.append(alphaHex); 
     str.append(blueHex); 
     str.append(greenHex); 
     str.append(redHex); 

     return str.toString(); 
    } 

    private static String To00Hex(int value) { 
     String hex = "00".concat(Integer.toHexString(value)); 
     return hex.substring(hex.length()-2, hex.length()); 
    } 
0

valor entero de color ARGB a cadena hexadecimal:

String hex = Integer.toHexString(color); // example for green color FF00FF00 

cadena hexadecimal a un entero valor de color ARGB:

int color = (Integer.parseInt(hex.substring(0,2), 16) << 24) + Integer.parseInt(hex.substring(2), 16); 
Cuestiones relacionadas