1. 程式人生 > >Android開發中十六進位制和十進位制的相互轉化

Android開發中十六進位制和十進位制的相互轉化

最近的開發 Android 專案中要實現使用者自定義顏色,於是就自己利用SeekBarEditText 實現了一個拾色器。

原理也很簡單,就是用四個SeekBar分別代表顏色的四個值:RGBAlpha,每個顏色值都用0-255來表示,最終在轉化為十六進位制顏色值。

十進位制轉化為十六進位制

但是怎麼把十進位制轉化為十六進位制呢?後來發現,其實Android內部已經給我們提供了轉化函式,如下:

String h = Integer.toHexString(255);    //此處h為"ff"

上述程式碼就是將一個十進位制 轉化為十六進位制,引數是十進位制數,返回一個十六進位制字串,通過這個函式把每一個顏色值都轉化為十六進位制字串,然後再將這幾個字串依次相加就是使用者選擇的顏色值。

十六進位制字串轉化為十進位制Int型

那麼有的時候需要把顏色值轉化為十進位制該怎麼實現呢?其實也很簡單,如下:

int d = Integer.valueOf("ff",16);   //d=255

利用上述引數就可以將十六進位制轉化為十進位制,第一個引數為十六進位制字串,第二引數為第一個引數是用幾進位制來表示的。
同理,如果要將二進位制轉化為十進位制,就可以這樣:

int d = Integer.valueOf("1111",2);  //d=15

顏色中十六進位制字串轉化為十進位制

如果只是簡單的進位制之間的轉換,那麼上面的函式就可以滿足要求,可是如果要在顏色中應用這些變換就有一點區別了。

在使用十六進位制表示顏色時候,用“#ffffff”這種字串形式當然可以,可是有時候需要int型的十六進位制,如0xffffff這種形式,如果這時候再用上邊提到的Integer.toHexString() 這個函式進行轉化,如果只是使用RGB三個引數不新增Alpha值還是可以使用,但是如果新增Alpha 就會出錯,因為int 型的數表示不了ARGB形式的顏色值轉化為十進位制之後的數,在這裡就需要用到Color 類中的函式:

int c = Color.parseColor("#ff123456");

用上面的函式就可以將ARGB顏色值由十六進位制字串轉化為十進位制的int型數了,比如要程式碼中用顏色表示某一個控制元件的背景就可以這樣:

//將widget(控制元件的名字)的背景設為黑色
widget.setBackgroundColor(Color.parseColor("#ff000000"));

記下來提醒一下自己,也希望可以幫助遇到同樣問題的你~

PS:開發了一個製作個性二維碼的應用,有興趣的朋友可以試一試~ 創意二維碼製作