为了在GWT-Widget中表示具有不同颜色的对象列表,我们需要动态获得具有与对象不同颜色的颜色列表.由于List的大小可能不同,我们需要能够计算这样的颜色列表.
解决方法
我的解决方案的另一个版本有范围:
List<int> getUniqueColors(int amount) { final int lowerLimit = 0x10; final int upperLimit = 0xE0; final int colorStep = (upperLimit-lowerLimit)/Math.pow(amount,1f/3); final List<int> colors = new ArrayList<int>(amount); for (int R = lowerLimit;R < upperLimit; R+=colorStep) for (int G = lowerLimit;G < upperLimit; G+=colorStep) for (int B = lowerLimit;B < upperLimit; B+=colorStep) { if (colors.size() >= amount) { //The calculated step is not very precise,so this safeguard is appropriate return colors; } else { int color = (R<<16)+(G<<8)+(B); colors.add(color); } } return colors; }
这个更加先进,因为它产生尽可能彼此不同的颜色(像@aiiobe那样).
通常我们将范围分成红色绿色和蓝色的3个子范围,计算我们需要迭代它们的步数(通过应用pow(范围,1f / 3))并迭代它们.
例如,给定数字3,它将生成0x0000B1,0x00B100,0x00B1B1.对于数字10,它将是:0x000076,0x0000EC,0x007600,0x007676,0x0076EC,0x00EC00,0x00EC76,0x00ECEC,0x760000,0x760076