小菜我最近在处理主题色方面的问题,有个小需求是处理更改颜色,判断色值等,稍稍整理了一下。
Color 大家都很熟悉,其组成方式是 RGB 红绿蓝三原色,小菜觉得可以按 ARGB 即 Alpha 透明度、Red 红色、Green 绿 和 Blue 蓝色来记。默认的 Alpha 为 FF/255 完全不透明,可不设置;若 Alpha 为 00/0 时,代表完全透明,则红绿蓝不起作用;而介于 00-FF/0-255 之间时,可以显示出颜色不同的层次效果。
小菜的测试步骤如下:
在 color.xml 中定义几个测试颜色值;
#3F51B5
#3F51B5
#FF4081
#40FF4081
小菜想是否可以直接用 R.color.XX 方式判断色值,测试不相同,小菜理解获取的是 R 的值;
// 日志输出
Log.e("color1==" + R.color.test_color1, "color2==" + R.color.test_color2);
// 结果
color1==2131427410: color2==2131427411
小菜测试用 getResources().getColor(R.color.XX) 方式,结果是对的;
// 日志输出
Log.e("test_color1==" + getResources().getColor(R.color.test_color1), "test_color2==" + getResources().getColor(R.color.test_color2));
// 结果
test_color1==-12627531: test_color2==-12627531
继续测试,获取某个控件背景色;
// 日志输出
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));
}
// 结果
color==-49023: test_color3==-49023
获取方式都是可以的,只是这种方式看起来并不直接,转成 16 进制看起来会更自然;
String Color_16(int color) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("#");
stringBuffer.append(Integer.