2011-06-30 21 views
147

Mam całkowitą które zostały wygenerowane z android.graphics.ColorJak przekonwertować liczbę całkowitą na ciąg szesnastkowy w systemie Android?

Integer ma wartość -16776961

Jak przekonwertować tę wartość na ciąg znaków hex z formatem #RRGGBB

Upraszczając: Chciałbym wyjście # 0000FF z -16776961

Uwaga: nie chcę wyjście zawierają alfa i próbowałem również this example bez powodzenia

+0

Jakie są próbujesz ustawić kolor hex? Myślę, że jest tu inna odpowiedź – Blundell

+0

@Blundell Wysyłam kolor do zewnętrznej aplikacji. Kolor musi być w tym formacie #RRGGBB –

+0

Co jest nie tak z http://developer.android.com/reference/android/content/res/Resources.html#getColor)? Będziesz musiał wkleić adres URL lub przewinąć do getColor (int) – Blundell

Odpowiedz

349

Maska sprawia, że ​​na pewno można dostać tylko formatu RRGGBB, a% 06X daje zerowy wyściełane hex (długi zawsze 6 znaków):

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

To działało idealnie, dziękuję! Łatwiejsze i dokładniejsze niż próba użycia podciągów na ścieżce Integer.toHexString(). – Tom

+0

Jak by to było, gdybym chciał to zrobić na odwrót, proszę? –

+7

Właśnie sobie sprawę, że istnieje metoda Color.parseColor (String hex), który robi dokładnie to, o co proszę. –

16

Wierzę, że znalazłem odpowiedź, Ten kod konwertuje liczbę całkowitą na ciąg szesnastkowy i usuwa alfa.

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

Uwaga używać tylko tego kodu, jeśli jesteś pewien, że usunięcie alfa nie wpłynie nic.

+1

Jeśli wyślesz "0x00FFFFFF" przez to spowoduje awarię 'Color.parseColor'. – TWiStErRob

7

Oto co zrobiłem

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

Dzięki chłopaki wy odpowiedzi zrobił coś

+0

Pierwszy wariant nie działa dla '0x00FFFFFF' ->" FFFFFF "(bez alfa). Drugi wariant nie działa dla '0x00000FFF' ->" F "(brakujące bity). – TWiStErRob

+0

@TWiStErRob zrobiłeś rozwiązanie, które niezawodnie działa dla kolorów z kanałem alfa? – Saket

+0

@Setet Wersja z najwyższą odpowiedzią powinna: '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

Dzięki tej metodzie Integer.toHexString można mieć Nieznany wyjątek kolorów dla niektórych kolorów, gdy przy użyciu Color.parseColor.

I z tej metody string.Format ("#% 06X" (0xFFFFFF & intColor)), stracisz wartość alfa.

Więc polecam tę metodę:

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

wartość całkowitą ARGB kolor do szesnastkowym wyrażenie:

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

szesnastkowy ciąg do liczby całkowitej wartości ARGB kolor:

int color = (Integer.parseInt(hex.substring(0,2), 16) << 24) + Integer.parseInt(hex.substring(2), 16); 
Powiązane problemy