猿问

不用java解析字符串颜色

我有一个这样的代码:

String hex = String.format("0x%02x%02x%02x", r * 0.5, green * 0.6, blue * 0.7));

0.5 和 0.6 和 0.7 是变量,我想从变量十六进制设置视图的背景颜色:

v.setBackgroundColor(Integer.parseInt(hex, 16));

当我尝试将其转换为十六进制整数时,它会抛出异常,例如

java.lang.NumberFormatException

我怎样才能做到这一点?


慕尼黑5688855
浏览 145回答 2
2回答

慕森王

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

相关分类

Java
我要回答