背景
在自定义view的学习中,想要设置颜色。如果直接在代码中输入"#a8d8ea",就看不到实际的颜色了。而使用资源文件能看到颜色。
那么怎么从color资源文件中获取String呢
canvas.drawColor(Color.parseColor(getColorString(R.color.color8328_1)));
刚开始使用的是直线思维的:
private String getColorString(int Rid) {
return String.valueOf(this.getContext().getColor(Rid));
}
实际效果是:
log:
color8328_1(#a8d8ea) -> -5711638
在网上查找的答案:
String strColor = String.format("#%06X", 0xFFFFFF & intColor);
String.format()用法
我们直接使用String.ValueOf(12635) 是ok的。
但是color它不是十进制数。所以就报错了
而String类的format()方法用于创建格式化的字符串,所以我们使用它来完成转换
学习链接:https://www.jianshu.com/p/db53c3453749
这里的使用情况
1、
所以"#%06X"的解读
“#” 在转换前加#号
“%” 用后面的规则组合、转换
“06” 6位数,不够就补0
“X” 整数类型(十六进制)
2、
format是可以处理各种各样类型的,字符串类型、字符类型、布尔类型、整数类型 等等
3、
0xFFFFFF & intColor
实践反馈
大失败。。。why???
log:
color8328_1(#a8d8ea) -> #040026
我怀疑是:所谓格式化为16进制的数,是从10进制的数变化而来的
证明失败:正确输出0xa2
Log.d(TAG, "onCreate: " + getColorString(0xa2));
又感觉像是十进制数不对一样:
a8d8ea -> 11065578 这是转换的结果,但是转换
Log.d(TAG, "www " + R.color.color8328_1);
结果是2130968614
2130968614 -> 7f040026
这就是结果了。。。可是为什么
<color name="color8328_1">#a8d8ea</color>
为什么会是这个数据呢???
最终解决方案:
https://stackoverflow.com/questions/5026995/android-get-color-as-string-value
colorStr=getResources().getString(R.color.someColor);