Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用Android的颜色填充ArrayList_Java_Android_Arrays_Arraylist_Colors - Fatal编程技术网

Java 用Android的颜色填充ArrayList

Java 用Android的颜色填充ArrayList,java,android,arrays,arraylist,colors,Java,Android,Arrays,Arraylist,Colors,我想创建2个ArrayList。一只手拿16种颜色,另一只手拿139种颜色 我有颜色列表(RGB为255126,32,十六进制为0xFFFF2552)。我想稍后使用ArrayList从中选择随机颜色 我试过int[],但不起作用。我尝试了ArrayList和ArrayList。我的问题是;我不知道如何将颜色添加到ArrayList 谢谢 目前,我正在探索这一点: Color cBlue = new Color(0,0,255); Color cRed = new Color(255,0,0);

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

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

我试过int[],但不起作用。我尝试了
ArrayList
ArrayList
。我的问题是;我不知道如何将颜色添加到ArrayList

谢谢

目前,我正在探索这一点:

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==newint[]{4,5}因为它只是一行代码。。。但是我怎样才能得到颜色,然后从中挑选呢

或者。。是否最好将颜色存储在strings.xml文件中,然后从那里填充ArrayList?如果是,我应该怎么做

谢谢

您可以尝试:

int[] colors = new int[] {Color.rgb(1,1,1), Color.rgb(...)};
举个例子,但我不认为只使用“一行”参数是个好主意

List<Integer> coloras = Arrays.asList(new Integer[]{Color.rgb(1, 1, 1), Color.rgb(...)});
然后使用循环读取它们:

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);
}

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

您也可以使用
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 colorList=new ArrayList();
颜色列表。添加(cBlue);
... 等
(将其声明为列表或ArrayList的区别在于,列表是ArrayList实现的接口。这通常是一个相当好的实践,但就您的目的而言,如果将其声明为列表或ArrayList,可能不会有什么区别)

如果您想在更少的代码行中完成,可以使用ArrayList初始值设定项块,如下所示:

List<Color> colorList = new ArrayList<Color> { new Color(...), cBlue };
List colorList=newarraylist{new Color(…),cBlue};
或者使用Arrays.asList,它接收数组并返回列表

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


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

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

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

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

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

static final Random random = new Random();
然后选择你的颜色

int colorIndex = random.nextInt(colors16.size());
Color color = colors16.get(colorIndex);
如果您觉得保护列表的内容很重要,可以按如下方式使其不可变,只需将颜色
int
s装箱到
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))
  )
);
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将自动装箱ints。

List List=new ArrayList()
list.add(cBlue)应该可以工作…如果你绝对需要一个列表结构,你可以使用
数组。AsList(…)
methodCode示例在尝试循环颜色时遇到了错误。size()当颜色为空时,你从其他答案中刷取信息,即我的答案,这是最好的答案:)我刚刚修复了它:P,Yes@gknicker,我只是一分钟一分钟地改进我的答案:)错了吗?你的答案很好,但你不是第一个。竞争最快、最好的答案:D。。我想这就是为什么stackexchange是一个很好的资源。现在正在尝试这两种解决方案。。我在列表的add语句中得到一个错误。第一个解决方案在“构造函数颜色(int,int,int)未定义”时中断。。错误:类型列表中的add(int,Color)方法不适用于参数(int),谢谢!它看起来像是可用的代码。现在,我必须将列表传递给我的GridViewAdapter,但情况完全不同;)。谢谢你的帮助!这也是一个正确的答案。然而,我喜欢XML解决方案的“干净性”,代码中的混乱更少。(叫我古怪;)。我仍在尝试将列表传递给我的适配器,我相信这两种解决方案都会带来相同的问题。谢谢你的解决方案!
static final Random random = new Random();
int colorIndex = random.nextInt(colors16.size());
Color color = colors16.get(colorIndex);
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))
  )
);