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"));
記下來提醒一下自己,也希望可以幫助遇到同樣問題的你~