因此,如果你正在寻找一个漂亮的调色板,也许使用完全随机的数值并不是一个好主意。
这种方法可能不会产生最好的结果,它总是以选择太深或太亮的类似颜色而告终。
Semi-random approach (Java):
如果你需要一些新鲜亮丽的颜色,那么请使用下面这个简单的类,这是我以前遇到同样问题时写的。它是
semi-random
并使用一个预定义的调色板。
class RandomColors {
private Stack<Integer> recycle, colors;
public RandomColors() {
colors = new Stack<>();
recycle =new Stack<>();
recycle.addAll(Arrays.asList(
0xfff44336,0xffe91e63,0xff9c27b0,0xff673ab7,
0xff3f51b5,0xff2196f3,0xff03a9f4,0xff00bcd4,
0xff009688,0xff4caf50,0xff8bc34a,0xffcddc39,
0xffffeb3b,0xffffc107,0xffff9800,0xffff5722,
0xff795548,0xff9e9e9e,0xff607d8b,0xff333333
public int getColor() {
if (colors.size()==0) {
while(!recycle.isEmpty())
colors.push(recycle.pop());
Collections.shuffle(colors);
Integer c= colors.pop();
recycle.push(c);
return c;
Random approach (Java):
But if you're still considering use random approach
你可能想用这一行来代替多行的代码。
int color= ((int)(Math.random()*16777215)) | (0xFF << 24);
使用这个(0xFF << 24)
的目的是将阿尔法值设置为最大,即透明度为零。
semi-random (Kotlin)
class RandomColors() {
private val recycle:Stack<Int> = Stack()
private val colors:Stack<Int> = Stack()
init {
recycle.addAll(
Arrays.asList(
// ARGB hex to int >> (0xFFEE5670.toInt(),...)
-0xbbcca, -0x16e19d, -0x63d850, -0x98c549,
-0xc0ae4b, -0xde690d, -0xfc560c, -0xff432c,
-0xff6978, -0xb350b0, -0x743cb6, -0x3223c7,
-0x14c5, -0x3ef9, -0x6800, -0xa8de,
-0x86aab8, -0x616162, -0x9f8275, -0xcccccd
fun getColor(): Int {
if (colors.size == 0)
while (!recycle.isEmpty()) colors.push(recycle.pop())
Collections.shuffle(colors)
val c = colors.pop()
recycle.push(c)
return c
Random approach (Kotlin):
val color = (Math.random() * 16777215).toInt() or (0xFF shl 24)