如何在Android上使用访问颜色和渐变?

问题描述:

所以我有一个在android中使用小数颜色的问题。如何在Android上使用访问颜色和渐变?

我从外部数据库获取颜色代码。

例如:

  • 16777215白色
  • 16711680是红色

现在我想用这个颜色来创建GradientDrawable。

int color = myDbReader.getColor(); //returns the decimal color code 
new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, new int[] {color, 0 }); 

该代码示例总是生成一个完整的白色渐变对象。

我试图谷歌如何以正确的方式转换小数颜色..但我没有找到任何东西。

任何人都可以给我一个提示如何以正确的方式使用小数颜色?

+0

你是否在代码中的某个地方调用drawable.setBounds()?这个调用对于android中的每个drawable都是必需的。 – Dalmas

+0

@LadaRaider - 实际上并不需要它。 – asenovm

所以根据您的建议我昨晚与阅读有关不同类型的颜色代码,终于找到了解决办法:

给出的数字是访问颜色代码,所以我只需要:

int color = myDbReader.getColor(); //returns the decimal color code 
gradient = new GradientDrawable(GradientDrawable.Orientation.LEFT_RIGHT, new int[] {Color.rgb((value/256/256)%256, (value/256)%256, value%256), 0 }); 

感谢您的帮助!

您应该阅读约android colours

Android颜色是32位无符号整数,没有签名!

另外Android的颜色也在使用Alpha位,请阅读文章,并且解决方案将会清晰。

即使SO是非常好的信息来源,您应该先询问它,然后才能在Google上输入“color android”时的第一个链接。

顺便说一句,我不是一个android开发人员。

+0

感谢您的建议! (并纠正标题)。我已经尝试在android devlopers部分找到解决方案,但我无法找到转换我的颜色代码的方法。也许我只是想念那里的东西! – soulcinder

Android颜色是ARGB单位,所以你的颜色实际上应该由4个字节组成,其中1个是alpha值。为了转换,你可以有这样的事情

0xFF000000 & yourColor 

,将你的颜色的不透明度设置为100%(阿尔法字节设置)。另一种选择是在将整数转换为十六进制字符串后使用Color.parseColor。也不要用一些魔术常数来引用颜色。 Color类的静态字段的设计使您不必这样做。