使用Android的颜色填充ArrayList

我想创建2个ArrayList。 一个拿着16种颜色,另一个拿着139。

我有颜色列表(RGB为255,126,32,Hex为0xFFFF2552)。 我想使用ArrayList稍后从中选择随机颜色。

我试过int [],这不起作用。 我尝试过ArrayListArrayList 。 我的问题是; 我不明白如何将颜色添加到ArrayLists。

谢谢!!

现在,我正在探索这个:

 Color cBlue = new Color(0,0,255); Color cRed = new Color(255,0,0); ArrayList colors = new ArrayList(); colors.add(cBlue); colors.add(cRed); 

等等…

我真的很喜欢int[] colors = = new int[] {4,5}; 因为它只有一行代码…但是我如何获取颜色,以后再选择?

或者..将颜色存储在strings.xml文件中然后从那里填充ArrayList会更好吗? 如果是这样,我该怎么做?

谢谢!!

你可以尝试:

 int[] colors = new int[] {Color.rgb(1,1,1), Color.rgb(...)}; 

例如,但我认为仅使用“一行”参数决定不是一个好主意。

 List coloras = Arrays.asList(new Integer[]{Color.rgb(1, 1, 1), Color.rgb(...)}); 

也会工作。

您可以在arrays.xml文件中创建一个arraylist:

   #ff0000 #00ff00 #0000ff   

然后使用循环来读取它们:

 String[] colorsTxt = getApplicationContext().getResources().getStringArray(R.array.colors); List colors = new ArrayList(); for (int i = 0; i < colorsTxt.length; i++) { int newColor = Color.parseColor(colorsTxt[i]); colors.add(newColor); } 

在我看来,保持列表中的颜色是最方便的解决方案。

要随机从列表中获取颜色,您可以:

 int rand = new Random().nextInt(colors.size()); Integer color = colors.get(rand); 

我会创建一个文本文件或xml文件填充颜色信息,并有一个函数,使用循环读取文件的每一行,为每一行创建一个Color对象,并将其添加到数组列表,然后转到下一个直到没有线条为止。

我建议不要使用配置文件,除非您希望能够在不更改代码的情况下更改颜色。 我怀疑你的颜色是不变的,所以文件只会给你的应用程序增加不必要的复杂性。

当您实际使用无法实例化的实用程序类android.graphics.Color时,您的问题中的代码示例假定为java.awt.Color

因此,我推荐以下解决方案作为静态变量(并注意以后不要修改数组的内容):

 static final int[] colors16 = { Color.rgb(255, 0, 0), Color.rgb(0, 255, 0), Color.rgb(0, 0, 255) }; 

现在添加一个Random的静态实例,用于从列表中选择随机颜色。

 static final Random random = new Random(); 

然后选择你的颜色!

 int colorIndex = random.nextInt(colors16.size()); Color color = colors16.get(colorIndex); 

如果您认为保护列表内容很重要,可以按照以下方式使其不可变,只需花费很少的费用将您的颜色装入Integer对象。

 static final List colors = Collections.unmodifiableList( Arrays.asList( Integer.valueOf(Color.rgb(255, 0, 0)), Integer.valueOf(Color.rgb(0, 255, 0)), Integer.valueOf(Color.rgb(0, 0, 255)) ) ); 

从技术上讲,你可以省略上面代码片段中的Integer.valueOf()转换,Java会自动进行整理。

你也可以使用int[] colors = new int[]{color1.getRGB(),color2.getRGB()}; 并解码使用: Color color = new Color(colors[0]);

你看起来有什么意义,但你应该指定ArrayList的类型。

 List colorList = new ArrayList(); colorList.add(cBlue); ... etc 

(将它声明为List或ArrayList之间的区别在于List是ArrayList实现的接口。这通常是很好的做法,但是对于您的目的,如果您将其声明为List或者它可能不会有所作为。一个ArrayList)。

如果你想用更少的代码行来做,你可以使用ArrayList初始化块,如下所示:

 List colorList = new ArrayList { new Color(...), cBlue }; 

或者使用Arrays.asList,它接收一个数组并返回一个List。

但总的来说,你应该习惯于使用Java,不要试图优化你的代码行,而不是那些行的性能。

(旁注:确保你使用的是正确的Color类。有android.graphics.Color和java.awt.Color,它们是完全不同的,不兼容的类型。你使用的构造函数来自java.awt.Color和Android一样,你可能会想要使用android.graphics.Color)。