Java 用Android的颜色填充ArrayList
我想创建2个ArrayList。一只手拿16种颜色,另一只手拿139种颜色 我有颜色列表(RGB为255126,32,十六进制为0xFFFF2552)。我想稍后使用ArrayList从中选择随机颜色 我试过int[],但不起作用。我尝试了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);
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))
)
);