2016-11-24 15 views
0

私のコードには、毎回同じ色で塗りつぶされた3つの図形があります。今私は彼らが色をランダムに入れ替えることを望みます。ここからどうやってそこに着きますか?今すぐすべての図形を同じ色に設定しますが、すべての色を使用して四角形の色を変更したい場合android-drawRectangle colors

私のコードにはusedColors.add(Color.paint);というエラーが表示されます。タイプのリストは、メソッドsetColorを「それが出ていますがpaint.setColor(usedColors.get(x));

『引数(int型)には適用されません型ペイントで(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

更新

あなただけString参照を含めることができ

ArrayList<String> usedColors ... 

このリスト

を宣言しました。 Color.YELLOWStringではないので、コンパイラは追加しようとすると文句を言います。

最良の修正があなたのリストにColor Sを格納することです:

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

今、あなたはあなたが常にリストでColorオブジェクトを使用していることを確認するために適切な変更を加える必要があります。

オリジナル答え

は今、あなたはActivityが作成されたときに一度だけ呼ばれるonCreate()で四角形を描画しています。矩形の色を変更するには、変更をトリガするイベントに応答する必要があります。たとえば、ユーザーが色を変更するためにクリックするボタンを作成するか、一定時間後に色を変更するタイマーを作成することができます。私はあなたがこれを行う方法の詳細については、Androidでのイベント処理に関するいくつかの調査を行うことをお勧めします。

また、カスタムコンポーネントを作成する場合もあります。これにより、描画機能を1つのクラスにカプセル化して、何度でも再利用することができます。現在のデザインよりも簡単に長方形を追加できます。

+0

カスタムコンポーネントは色をランダムにシェイプに設定しますか?ポイントは、私は2つの図形が同じ色を持つようにしたくないということです。それは私の問題です。 –

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

をこの場合、すべての3つの形状sはランダムカラーを持ちます(しかし、それらはある確率で同じになることがあります)。 resoursesファイルに色の配列を作成する方が良いでしょうが、ここでは例を示しました。

ボタンを追加して、をクリックリスト()に追加し、色を動的に変更したい場合は、そこにすべての図形を更新できます。

+0

質問を編集して今すぐ配列を使用しました。私は色の倍増を避けたい –

+0

まだ、problesは、あなたがcanvas.drawRect()のすべての呼び出しに対して同じPaintオブジェクトを使用しているということです。私は少し答えを更新しました。このメソッドを追加し、そこにpaintを渡すのではなくdrawRect()メソッドで呼び出します。 – Gaket

+0

キーの変更は、異なるペイントオブジェクトを作成する必要があるため、長方形の色が異なることです。この方法は、この場合に役立ちます。 – Gaket

関連する問題