2013-06-19 702 views

回答

31

使用此

String hexColor = String.format("#%06X", (0xFFFFFF & intColor)); 

我们知道在十六进制颜色值的lenght为6。所以你看,这里6。 %06X与来自(0xFFFFFF & intColor)的结果相匹配,并且如果长度小于6,则通过将ZERO追加到结果的左侧而使结果为6。你看#,所以这#字符被追加到结果,最后你得到一个十六进制颜色值。

+0

请问您能解释括号内的代码吗? – Marek

+0

你问'(0xFFFFFF&intColor)'?如果是,则会将int值转换为十六进制。 –

+0

我对“#%06X”更感兴趣。这是一个正则表达式,我完全不明白。你能解释一下吗? – Marek

1

RGB使用十六进制数字格式。 如果您有整数值,则将其转换为hexa ,.

46

我认为是最简单,最好的解决办法,我是直接使用Color类,如下所示:

int red = Color.red(intColor); 
int green = Color.green(intColor); 
int blue = Color.blue(intColor); 

这样,我已经可以用整数值处理,而无需处理字符串。另一方面,如果代表rgb颜色的字符串是你需要的,Pankaj Kumar的答案是最好的。我希望这对某人有用。

+0

很好。谢谢 – cxphong

+1

语法可能已更改。除非有一个我不知道的静态Color类:'new Color(intColor).getRed();' –

+0

我不知道......我现在还没有在Android上工作很长一段时间。如果您确定这一点,您可以使用此信息编辑我的答案,甚至可以使用发生此更改的版本 –

0

由于SDK 26 you can just use

Color c = Color.valueOf(colorInt); 

除此之外,它似乎没有可能建立从任意的argb Color实例。底层代码使用私有构造函数:

/** 
* Creates a new <code>Color</code> instance from an ARGB color int. 
* The resulting color is in the {@link ColorSpace.Named#SRGB sRGB} 
* color space. 
* 
* @param color The ARGB color int to create a <code>Color</code> from 
* @return A non-null instance of {@link Color} 
*/ 
@NonNull 
public static Color valueOf(@ColorInt int color) { 
    float r = ((color >> 16) & 0xff)/255.0f; 
    float g = ((color >> 8) & 0xff)/255.0f; 
    float b = ((color  ) & 0xff)/255.0f; 
    float a = ((color >> 24) & 0xff)/255.0f; 
    return new Color(r, g, b, a, ColorSpace.get(ColorSpace.Named.SRGB)); 
}