2016-10-27 115 views
3

所以我想要一個字符串在用戶輸入答案時隨機給出一個顏色。我的問題是,我不知道如何使字符串的隨機顏色成爲特定範圍的顏色。例如,如果我想讓字符串隨機變成藍色,紅色,綠色,粉紅色,白色或棕色。只有這些顏色,沒有其他。如何從Java中的一組選定顏色中輸出隨機顏色? (Android)

到目前爲止,我已經得到了完全隨機的顏色出來使用下面的代碼的所有可能的RBG的變化:

Random rand = new Random(); 
      int r = rand.nextInt(254)+1; 
      int g = rand.nextInt(254)+1; 
      int b = rand.nextInt(254)+1; 

      int randomColor = Color.rgb(r,g,b); 
      word.setTextColor(randomColor); 

雖然如前面提到的,這不是我的目標實現。取而代之的是,我想要設置可以隨機應用到字符串的顏色。這些是我會選擇的顏色,然後隨機設置爲字符串顏色。這設置了一個完全隨機的顏色,我不打算擁有這個範圍。例如,我最終可能會得到5種藍色變體。

如果有人可以提出解決方案,我會很感激。謝謝。

+0

check [this](http://stackoverflow.com/a/25923418/3425390)。 –

+0

@AkashPatel謝謝,就是這麼做的。 – H3ll0

+0

@ H3II0歡迎.. :) –

回答

0

首先在color.xml定義你的顏色並創建它的數組。

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

<item name="blue" type="color">#FF33B5E5</item> 
<item name="purple" type="color">#FFAA66CC</item> 
<item name="green" type="color">#FF99CC00</item> 
<item name="orange" type="color">#FFFFBB33</item> 
<item name="red" type="color">#FFFF4444</item> 
<item name="darkblue" type="color">#FF0099CC</item> 
<item name="darkpurple" type="color">#FF9933CC</item> 
<item name="darkgreen" type="color">#FF669900</item> 
<item name="darkorange" type="color">#FFFF8800</item> 
<item name="darkred" type="color">#FFCC0000</item> 

<integer-array name="androidcolors"> 
    <item>@color/blue</item> 
    <item>@color/purple</item> 
    <item>@color/green</item> 
    <item>@color/orange</item> 
    <item>@color/red</item> 
    <item>@color/darkblue</item> 
    <item>@color/darkpurple</item> 
    <item>@color/darkgreen</item> 
    <item>@color/darkorange</item> 
    <item>@color/darkred</item> 
</integer-array> 

</resources> 

現在在onCreate方法中生成如下所示的隨機顏色。

int[] androidColors = getResources().getIntArray(R.array.androidcolors); 
int randomAndroidColor = androidColors[new Random().nextInt(androidColors.length)]; 

最後設置這個生成的顏色。

view.setBackgroundColor(randomAndroidColor); 

來源取自here

1

一個簡單的方法就是定義一個顏色列表。然後使用隨機來選擇您的動作中的一種顏色。

所需的顏色

這不是一個廣泛的名單,但包括4種顏色開始,紅色,藍色,綠色和粉紅色的創建列表。

List<Integer> colors = new ArrayList<>(); 
colors.add(Color.rgb(235,22,220)); 
colors.add(Color.BLUE); 
colors.add(Color.GREEN); 
colors.add(Color.RED); 

創建一個簡單的方法返回一個隨機顏色

現在我們只需要一種方法來從我們的名單返回一個隨機顏色。這是一個驚人的2線長。

private int randomColor(){ 
    Random rand = new Random(); 
    return colors.get(rand.nextInt(colors.size())); 
} 

更改TextView的顏色

現在,我們可以只改變顏色。以下示例位於onClickListener按鈕中。您也可以在此添加一些驗證,以確保您不會獲得重複的顏色,例如連續兩次藍色。

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     int color = randomColor(); 
     if(txtView.getCurrentTextColor() != color){ 
      txtView.setTextColor(color); 
     }else{ 
      txtView.setTextColor(randomColor()); 
     } 
    } 
}); 

簡單,乾淨,快速寫入。

+0

Android Studio中的數組中沒有「.add」選項。我將如何整合它? – H3ll0

+0

.add是LIST類的一種方法。爲了使用.add,你需要使用一個列表。你使用什麼數據結構?我的例子是一個LIST – basic

0

邊注:

rand.nextInt(254)+1; 

產生介於1和255之間的數字,顏色範圍是但是0和255之間,從而

rand.nextInt(256); 

真的應該包括所有的可能性。

現在你的問題

如果只想一定數量的顏色之間變動內容,dont't隨機在所有1600萬點的可能性,但預定義了一套漂亮的顏色。

要麼你創建與預定義的顏色組成的數組,只是隨機選擇一個,或者你產生顏色,但限制的結果:

int r = 0; 
    int g = 0; 
    int b = 0; 
    switch(rand.nextInt(8)){ // switch over 8 possible colors 
     case (0): // red 
      r = 205; 
      break; 
     case (1): // green 
      g = 205; 
      break; 
     case (2): // blue 
      b = 205; 
      break; 
     case (3): // pink 
      r = 255; 
      g = 20; 
      b = 147; 
      break; 
     case (4): // yellow 
      r = 200; 
      g = 200; 
      break; 
     case (5): // magenta 
      r = 200; 
      b = 200; 
      break; 
     case (6): // orange 
      r = 255; 
      g = 165; 
      break; 
     case (7): // purple 
      r = 128; 
      b = 128; 
      break; 
    } 

當然,這是一個「大」的解決方案,但會避免創建數組駐留在你的內存中。

0

使用顏色選擇器工具來了解RGB值如何工作。例如,如果你保持R = 255,然後設置G = B =一些相同的數字,你會得到一些紅色陰影。綠色和藍色相同。 但是,如果保持其他兩個相同並僅更改剩餘值,它將再次返回一些較淺或較暗版本的紅色,綠色或藍色(取決於剩餘值是R,G還是B)。 這款shorcut適合各種顏色。因此,例如,找到一個紫色。然後,你將不得不相同地改變兩個RGB值,以獲得不同的Purple。

示例: R = 255,G = 65,B = 255是紫色。

R = 190,G = 65,B = 190也是紫色的。

R = 190,6 = 95,B = 190也是紫色。

但是,有一個範圍。我的意思是,價值觀不能總是在0-255之間。要找到這個範圍,你可以簡單地嘗試幾個值來找出最小值和最大值。

請注意,這只是一條捷徑,但我認爲它對您有用。

編輯:如需更爲可接受的解決方案,請嘗試瞭解十六進制顏色的工作原理。然後你可以定義某些顏色類型的範圍。從這裏開始: http://blog.digitaltutors.com/understanding-hexadecimal-colors-simple/