2 回答
TA贡献1777条经验 获得超3个赞
这段代码可能存在三个问题:
正如@shiftpsh 所指出的:
Integer.parseInt不理解0x前缀。有两种方法可以解决这个问题:使用
Integer.decode宁可Integer.parseInt。不要
0x在格式中包含前缀。第二个潜在问题是这
%02x意味着十六进制,用最少两位数字填充零。但是,如果任何的r,green或者blue是足够大的,所产生的颜色值将大于255,你会得到超过2个十六进制数字。当字符串被解码时,这将导致不正确的 RGB 值。我很惊讶它
%02x适用于像r * 0.5. 后者是 adouble并且根据我对 javadoc的阅读,x转换不适用。
但是,如果此代码的唯一目的是从r,green和 中创建 RGB 值blue,则有一种明显更有效的方法。
int r0 = ((int)(r * 0.5)) & 0xff;
int g0 = ((int)(green * 0.6)) & 0xff;
int b0 = ((int)(blue * 0.7)) & 0xff;
v.setBackgroundColor((r0 << 16) | (g0 << 8) | b0);
或者,使用android.graphics.Color.argbRGB 转换应该同样有效......尽管这是一个 Android API 而不是 Java API。(我找不到同样高效的直接等效的 Java SE 库方法。)
添加回答
举报
