2016-11-24 39 views
0

在我的代码中有三种形状,每次都用相同的颜色填充。现在我想让他们随机交换颜色。我如何从这里到达那里?现在它将所有形状设置为相同的颜色,但我希望它们使用所有颜色并更改矩形的颜色android - drawRectangle colors

我在我的代码中收到错误usedColors.add(Color.paint);它说'方法add(int,Color)in the型列表不适用的参数(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); 
+0

请发表一个完整的例子。这意味着你的代码应该看起来像一个Java程序。特别是,你应该在该类中有一个'class'和一个方法,然后包含你所问的代码。请注意,这个**并不意味着在你的应用中发布每个类。也不意味着发布包含您所询问的代码的整个课程。这意味着要发布足够的代码,以便我们对正在讨论的部分有一些上下文。俗话说,尽量简单但不简单。 –

+0

你是对的,对不起 –

+0

你怎么知道什么时候改变颜色?用户是否会点击一个按钮?你想让他们在一段时间后改变吗?或者是什么? –

回答

0

更新

您已经声明

ArrayList<String> usedColors ... 

此列表只能包含String引用。由于Color.YELLOW不是String,因此编译器在尝试添加它时会发出抱怨。

最好的解决办法是存储Color在你的名单:

List<Color> usedColors = new ArrayList<>(); 

现在,你将不得不作出适当的修改,以确保你总是使用Color对象与列表。

原来的答复

现在,您绘制在onCreate()矩形创建Activity时只调用一次。为了改变矩形的颜色,你需要响应一些触发变化发生的事件。例如,您可以制作一个用户单击以更改颜色的按钮,或者您可以创建一个计时器,在一段时间后更改颜色。我建议你对Android中的事件处理进行一些研究,以了解更多关于如何执行此操作的信息。

您也可以考虑创建一个自定义组件。这将允许您将绘图功能封装到单个类中,可以根据需要多次重复使用。然后,您可以比现在的设计更容易地添加更多的矩形。

+0

自定义组件将颜色随机设置为形状?问题是我不希望两个形状相同的颜色,这是我的问题 –

+0

@JoeS不,自定义组件应该有一个'setColor()'或类似的方法。然后像'MainActivity'这样的其他人选择要使用的颜色。这种设计使得它更清楚一点,您必须在每个组件上单独设置颜色。现在你为所有矩形设置一次颜色。 –

0

你有相同的颜色,因为你不改变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)); 

在这种情况下,所有三个形状s将会有randdom颜色(但它们可能与某些概率相同)。最好在你的resourses文件中创建一些颜色数组,但在这里我只提供了一个例子。

您可以添加一个按钮并在onClickListener()上添加并更新其中的所有形状,如果您希望它们动态更改颜色。

+0

我编辑了问题并立即使用数组。我想避免加倍颜色 –

+0

但问题在于,您正在为canvas.drawRect()的所有调用使用相同的Paint对象。我稍微更新了我的答案。添加这个方法并在drawRect()方法中调用它,而不是仅仅在那里传递paint。 – Gaket

+0

关键的变化是你应该创建不同的绘画对象,所以矩形有不同的颜色。这种方法在这种情况下应该会有所帮助。 – Gaket