2016-11-24 20 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

相關問題