用 Android 的颜色填充 ArrayList

Fill ArrayList with colors for Android

我想创建 2 个 ArrayList。一个有16种颜色,一个有139种颜色。

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

我试过 int[],没用。我试过 ArrayList<Integer>ArrayList<Color>。我的问题是;我不明白如何将颜色添加到 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(...)};

例如,但我认为仅使用 "one line" 参数来决定并不是一个好主意。

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

也可以。

您可以在 arrays.xml 文件中创建数组列表:

<resources>
    <string-array name="colors">        
        <item>#ff0000</item>
        <item>#00ff00</item>  
        <item>#0000ff</item>
    </string-array>
</resources>

然后使用循环读取它们:

String[] colorsTxt = getApplicationContext().getResources().getStringArray(R.array.colors);
List<Integer> colors = new ArrayList<Integer>();
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 对象并将其添加到数组列表,然后转到下一行,直到没有剩余行。

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

你的内容看起来很有道理,但你应该指定 ArrayList 的类型。

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

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

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

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

或使用 Arrays.asList,它接收一个数组和 returns 一个列表。

但一般来说,您应该习惯 Java 的冗长,不要试图优化您的代码行,而不是优化这些行的性能。

(旁注:确保您使用的是正确的颜色 class。有 android.graphics.Color 和 java.awt.Color,它们是完全不同的、不兼容的类型。您的构造函数重新使用来自 java.awt.Color,而对于 Android,您可能会想要使用 android.graphics.Color)。

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

当您实际使用无法实例化的实用程序 class 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);

如果您觉得保护列表的内容很重要,您可以按如下方式使其不可变,代价是将颜色 int 装箱到 Integer 个对象中。

static final List<Integer> 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 将自动装箱整数。