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:開發了一個製作個性二維碼的應用,有興趣的朋友可以試一試~ 創意二維碼製作