在我的代码中有三个形状,每次都用相同的颜色填充。现在我想让它们随机交换颜色。从这里怎么走?现在它将所有形状设置为相同的颜色,但我希望它们使用所有颜色并更改矩形的颜色
我在usedColors.add(Color.paint);上的代码中遇到错误,它说“类型列表中的方法add(int,Color)不适用于参数(Int)”。
在paint.setColor(usedColors.get(x));中,它给出了“类型setColor(int)中的方法不适用于参数(字符串)”。
public class MainActivity extends Activity {
private Paint paint = new Paint();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Canvas canvas = new Canvas();
paint.setAntiAlias(true);
List<Color> usedColors = new ArrayList<>();
Random rand = new Random();
int colorsFound = 0;
while(colorsFound < 3) {
int rando = rand.nextInt(3) + 1;
switch (rando) {
case 1:
if (!usedColors.contains("yellow")) {
colorsFound++;
usedColors.add(Color.YELLOW);
} else {
continue;
}
break;
case 2:
if (!usedColors.contains("green")) {
colorsFound++;
usedColors.add(Color.GREEN);
} else {
continue;
}
break;
case 3:
if (!usedColors.contains("red")) {
colorsFound++;
usedColors.add(Color.RED);
} else {
continue;
}
break;
}
}
Paint paint = new Paint();
paint.setColor(usedColors.get(0));
canvas.drawRect((float) ((float) canvas.getWidth()/50), (float) (canvas.getHeight()/1.32), canvas.getWidth()/15, (float) (canvas.getHeight()/2.8), paint);
paint.setColor(usedColors.get(1));
canvas.drawRect((float) (canvas.getWidth()/1.067), (float) (canvas.getHeight()/1.32), (float) (canvas.getWidth()/1.02), (float) (canvas.getHeight()/2.8), paint);
paint.setColor(usedColors.get(2));
canvas.drawRect((float) (canvas.getWidth()/10), (float) (canvas.getHeight()/3), (float) (canvas.getWidth()/1.1), (float) (canvas.getHeight()/3.35), green);发布于 2016-11-25 00:24:55
更新
你已经声明了
ArrayList<String> usedColors ...此列表只能包含String引用。因为Color.YELLOW不是String,所以当您尝试添加它时,编译器会报错。
最好的解决方法是将Color存储在列表中:
List<Color> usedColors = new ArrayList<>();现在,您必须进行适当的更改,以确保始终在列表中使用Color对象。
原始答案
现在,您正在onCreate()中绘制矩形,它只在创建Activity时调用一次。为了更改矩形的颜色,您需要响应一些触发更改发生的事件。例如,您可以创建一个按钮,用户可以单击该按钮来更改颜色,或者您可以创建一个计时器,用于在一段时间后更改颜色。我建议你在Android中做一些事件处理的研究,以了解更多关于如何做到这一点。
您还可以考虑创建自定义组件。这将允许您将绘图功能封装到单个类中,该类可以多次重用。然后,您可以比使用当前设计更容易地添加更多矩形。
发布于 2016-11-25 00:43:39
您具有相同的颜色,因为您不会在实际调用canvas.drawRect()之间更改绘制颜色。
您可以在onCreate()方法后面添加简单的方法:
private Paint getRandomColorPaint() {
Paint paint = new Paint();
paint.setAntiAlias(true);
Random random = new Random();
int[] colors = {Color.YELLOW, Color.BLUE, Color.GREEN, Color.RED };
int randomNumber = random.nextInt(colors.length);
paint.setColor(colors[randomNumber]);
return paint;
}然后打电话给:
canvas.drawRect( ..same here.., getRandomColorPaint(paint));在这种情况下,所有三个形状都将具有随机颜色(但它们可以以一定的概率相同)。在你的资源文件中创建颜色数组会更好,但这里我只是提供了一个例子。
如果要动态更改颜色,可以添加一个按钮并添加onClickListener()并更新其中的所有形状。
https://stackoverflow.com/questions/40790523
复制相似问题