Android開發中 十進位制,十六進位制的相互轉化
最近的開發 Android專案中要實現使用者自定義顏色,於是就自己利用 SeekBar 和 EditText 實現了一個拾色器。
原理也很簡單,就是用四個SeekBar 分別代表顏色的四個值:R,G,B,Alpha,每個顏色值都用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"));
記下來提醒一下自己,也希望可以幫助遇到同樣問題的你~