Android Color 判斷色值小結(jié)

??????小菜我最近在處理主題色方面的問題,有個小需求是處理更改顏色键菱,判斷色值等谬墙,稍稍整理了一下今布。
??????Color 大家都很熟悉,其組成方式是 RGB 紅綠藍三原色拭抬,小菜覺得可以按 ARGB 即 Alpha 透明度、Red 紅色、Green 綠 和 Blue 藍色來記纯赎。默認(rèn)的 Alpha 為 FF/255 完全不透明哮塞,可不設(shè)置;若 Alpha 為 00/0 時算凿,代表完全透明份蝴,則紅綠藍不起作用;而介于 00-FF/0-255 之間時氓轰,可以顯示出顏色不同的層次效果婚夫。


小菜的測試步驟如下:

  1. 在 color.xml 中定義幾個測試顏色值;
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="test_color1">#3F51B5</color>
    <color name="test_color2">#3F51B5</color>
    <color name="test_color3">#FF4081</color>
    <color name="test_color4">#40FF4081</color>
</resources>
  1. 小菜想是否可以直接用 R.color.XX 方式判斷色值署鸡,測試不相同案糙,小菜理解獲取的是 R 的值;
// 日志輸出
Log.e("color1==" + R.color.test_color1, "color2==" + R.color.test_color2);
// 結(jié)果
color1==2131427410: color2==2131427411
  1. 小菜測試用 getResources().getColor(R.color.XX) 方式靴庆,結(jié)果是對的时捌;
// 日志輸出
Log.e("test_color1==" + getResources().getColor(R.color.test_color1), "test_color2==" + getResources().getColor(R.color.test_color2));
// 結(jié)果
test_color1==-12627531: test_color2==-12627531
  1. 繼續(xù)測試,獲取某個控件背景色炉抒;
// 日志輸出
if (mColorTv1.getBackground() instanceof ColorDrawable) {
    ColorDrawable colordDrawable = (ColorDrawable) mColorTv1.getBackground();
    int color = colordDrawable.getColor();
     Log.e("color1==" + color, "test_color3==" + getResources().getColor(R.color.test_color3));
}
// 結(jié)果
color==-49023: test_color3==-49023
  1. 獲取方式都是可以的奢讨,只是這種方式看起來并不直接,轉(zhuǎn)成 16 進制看起來會更自然端礼;
String Color_16(int color) {
    StringBuffer stringBuffer = new StringBuffer();
    stringBuffer.append("#");
    stringBuffer.append(Integer.toHexString(Color.alpha(color)));
    stringBuffer.append(Integer.toHexString(Color.red(color)));
    stringBuffer.append(Integer.toHexString(Color.green(color)));
    stringBuffer.append(Integer.toHexString(Color.blue(color)));
    return stringBuffer.toString();
}

String Color_16_NoAlpha(int color) {
    StringBuffer stringBuffer = new StringBuffer();
    stringBuffer.append("#");
    stringBuffer.append(Integer.toHexString(Color.red(color)));
    stringBuffer.append(Integer.toHexString(Color.green(color)));
    stringBuffer.append(Integer.toHexString(Color.blue(color)));
    return stringBuffer.toString();
}
// 日志輸出
if (mColorTv1.getBackground() instanceof ColorDrawable) {
    ColorDrawable colordDrawable = (ColorDrawable) mColorTv1.getBackground();
    int color = colordDrawable.getColor();
     Log.e("color==" + Color_16(color), "test_color3==" + Color_16(getResources().getColor(R.color.test_color3)));
}
// 結(jié)果
color==#FF4081: test_color3==#FF4081
測試結(jié)果

以下是測試完整代碼:

public class ColorActivity extends AppCompatActivity {

    Toolbar mToolbar;
    TextView mTitleTv, mColorTv1, mColorTv6;
    StringBuffer strBuffer = new StringBuffer();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_color);

        mToolbar = (Toolbar) this.findViewById(R.id.toolbar);
        mTitleTv = (TextView) this.findViewById(R.id.tv_toolbar_title);
        mTitleTv.setText("Color 色值判斷");
        mColorTv1 = (TextView) this.findViewById(R.id.color_tv1);
        mColorTv6 = (TextView) this.findViewById(R.id.color_tv6);

        strBuffer.append("R.color.test_color1 方式  " + R.color.test_color1 + "\n" + "R.color.test_color2 方式  " + R.color.test_color2 + "\n");
        strBuffer.append("getResources().getColor(R.color.test_color1) 方式  " + getResources().getColor(R.color.test_color1) + "\n" + "getResources().getColor(R.color.test_color2) 方式  " + getResources().getColor(R.color.test_color2) + "\n" + "getResources().getColor(R.color.test_color3) 方式  " + getResources().getColor(R.color.test_color3) + "\n");
      
        if (mToolbar.getBackground() instanceof ColorDrawable) {
            ColorDrawable colordDrawable = (ColorDrawable) mToolbar.getBackground();
            int color = colordDrawable.getColor();

            Log.e("=======color1==" + color, "=======color2==" + getResources().getColor(R.color.test_color3));
        }

        if (mColorTv1.getBackground() instanceof ColorDrawable) {
            ColorDrawable colordDrawable = (ColorDrawable) mColorTv1.getBackground();
            int color = colordDrawable.getColor();
            strBuffer.append("ColorTv  " + color + "\n");
            strBuffer.append("ColorTv 十六進制  " + Color_16(color) + "\n");
            strBuffer.append("ColorTv 十六進制(無透明度)  " + Color_16_NoAlpha(color) + "\n");
            strBuffer.append("ColorTv 透明度 " + Color_Alpha(color) + " 紅 " + Color_Red(color) + " 綠 " + Color_Green(color) + " 藍 " + Color_Blue(color) + "\n");
        }
        strBuffer.append("R.color.test_color3 十六進制  " + Color_16(getResources().getColor(R.color.test_color3)) + "\n");
        strBuffer.append("R.color.test_color3 十六進制(無透明度)  " + Color_16_NoAlpha(getResources().getColor(R.color.test_color3)) + "\n");
        strBuffer.append("R.color.test_color3 透明度 " + Color_Alpha(getResources().getColor(R.color.test_color3)) + " 紅 " + Color_Red(getResources().getColor(R.color.test_color3)) + " 綠 " + Color_Green(getResources().getColor(R.color.test_color3)) + " 藍 " + Color_Blue(getResources().getColor(R.color.test_color3)) + "\n");
        strBuffer.append("R.color.test_color4 十六進制  " + Color_16(getResources().getColor(R.color.test_color4)) + "\n");
        strBuffer.append("R.color.test_color4 十六進制(無透明度)  " + Color_16_NoAlpha(getResources().getColor(R.color.test_color4)) + "\n");
        strBuffer.append("R.color.test_color4 透明度 " + Color_Alpha(getResources().getColor(R.color.test_color4)) + " 紅 " + Color_Red(getResources().getColor(R.color.test_color4)) + " 綠 " + Color_Green(getResources().getColor(R.color.test_color4)) + " 藍 " + Color_Blue(getResources().getColor(R.color.test_color4)) + "\n");
        mColorTv6.setText(strBuffer.toString());

    }

    String Color_16(int color) {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("#");
        stringBuffer.append(Integer.toHexString(Color.alpha(color)));
        stringBuffer.append(Integer.toHexString(Color.red(color)));
        stringBuffer.append(Integer.toHexString(Color.green(color)));
        stringBuffer.append(Integer.toHexString(Color.blue(color)));
        return stringBuffer.toString();
    }

    String Color_16_NoAlpha(int color) {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("#");
        stringBuffer.append(Integer.toHexString(Color.red(color)));
        stringBuffer.append(Integer.toHexString(Color.green(color)));
        stringBuffer.append(Integer.toHexString(Color.blue(color)));
        return stringBuffer.toString();
    }

    String Color_Alpha(int color) {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(Integer.toHexString(Color.alpha(color)));
        return stringBuffer.toString();
    }

    String Color_Red(int color) {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(Integer.toHexString(Color.red(color)));
        return stringBuffer.toString();
    }

    String Color_Green(int color) {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(Integer.toHexString(Color.green(color)));
        return stringBuffer.toString();
    }

    String Color_Blue(int color) {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(Integer.toHexString(Color.blue(color)));
        return stringBuffer.toString();
    }

    public static int Color_ChangeAlpha(int color, int alpha) {
        int red = Color.red(color);
        int green = Color.green(color);
        int blue = Color.blue(color);

        return Color.argb(alpha, red, green, blue);
    }
}

??????Tips:獲取控件背景色時要注意 backdround 是 color 還是 drawable禽笑,可先判斷是否是 ColorDrawable。


來源: 阿策小和尚

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛤奥,一起剝皮案震驚了整個濱河市佳镜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凡桥,老刑警劉巖蟀伸,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缅刽,居然都是意外死亡啊掏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門衰猛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迟蜜,“玉大人,你說我怎么就攤上這事啡省∧染Γ” “怎么了髓霞?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長畦戒。 經(jīng)常有香客問我方库,道長,這世上最難降的妖魔是什么障斋? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任纵潦,我火速辦了婚禮,結(jié)果婚禮上垃环,老公的妹妹穿的比我還像新娘邀层。我一直安慰自己,他們只是感情好晴裹,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布被济。 她就那樣靜靜地躺著,像睡著了一般涧团。 火紅的嫁衣襯著肌膚如雪只磷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天泌绣,我揣著相機與錄音钮追,去河邊找鬼。 笑死阿迈,一個胖子當(dāng)著我的面吹牛元媚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苗沧,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼刊棕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了待逞?” 一聲冷哼從身側(cè)響起甥角,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎识樱,沒想到半個月后嗤无,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡怜庸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年当犯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片割疾。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡嚎卫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宏榕,到底是詐尸還是另有隱情拓诸,我是刑警寧澤胸懈,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站恰响,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏涌献。R本人自食惡果不足惜胚宦,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望燕垃。 院中可真熱鬧枢劝,春花似錦、人聲如沸卜壕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轴捎。三九已至鹤盒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侦副,已是汗流浹背侦锯。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留秦驯,地道東北人尺碰。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像译隘,于是被迫代替她去往敵國和親亲桥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理固耘,服務(wù)發(fā)現(xiàn)题篷,斷路器,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • iOS中的顏色有UIColor玻驻、CGColor悼凑、CIColor三種,下面對三種顏色分別進行說明: 一璧瞬、常用的UIC...
    lfp901020閱讀 6,705評論 0 7
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程户辫,因...
    小菜c閱讀 6,409評論 0 17
  • 接下來我們看Base文件夾下的UIKIt文件夾的內(nèi)容。 1.UIColor+YYAdd 這里看了這個類嗤锉,里面有許多...
    充滿活力的早晨閱讀 2,274評論 0 1
  • 歲歲鐘聲賀凱宴渔欢, 月月奮進上階梯。 如意拼搏鼓樂奏瘟忱, 歌聲傳揚心歡喜奥额。 ――藏頭詩:歲月如歌
    六月天氣閱讀 284評論 20 22