2014-09-18 24 views
5

Czego chcę, gdy ładuję moją aplikację, aby losowo mieć pewne kolorowe tło z predefiniowanej listy ciągów przechowywanych w pliku wartości xml o nazwie kolory.Android: Ustaw losowe tło koloru na tworzeniu

Co mam obecnie to jeden zestaw kolorów jako tło zdefiniowane za pomocą kodu koloru ciągu za pomocą edytora GUI w eclipse.

Dla mojego życia nie mogę ustalić, jak uzyskać tło, aby losowo wybrać jeden z 9 ciągów i wyświetlać go za każdym razem, gdy aktywność jest aktywowana.

Wskazówki na ten temat byłyby nieocenione.

Odpowiedz

34

W colors.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> 

W onCreate()

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

Można ustawić zmienną Random rnd = new Random(); jako liczbę losową (wygeneruje ona losową liczbę pseudo od 0 do 1). Wtedy można powiedzieć:

if (rnd < 0.09) { 
     //pick first colour 
    } else if (rnd >= 0.09 && rnd < 0.18) { 
     //pick second colour 
    } else if (rnd >= 0.18 && rnd < 0.27) { 
     //pick second colour  
    } else // etc etc up to 1.0 when you will have 9 options, each with an equal chance of randomly being picked 

ten sposób losowy numer rnd będzie określić, jaki kolor tła jest każdorazowo onCreate() nazywa.

4

Myślę, że mogłem znaleźć proste podejście, ale niektóre z czasem wdrożenia można wybrać losowy kolor z określonej palety kolorów, a następnie przeanalizować kolor tej linii na swoim tle.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="bright_pink">#FF007F</color> 
    <color name="red">#FF0000</color> 
    <color name="orange">#FF7F00</color> 
    <color name="yellow">#FFFF00</color> 
    <color name="chartreuse">#7FFF00</color> 
    <color name="green">#00FF00</color> 
    <color name="spring_green">#00FF7F</color> 
    <color name="cyan">#00FFFF</color> 
    <color name="azure">#007FFF</color> 
    <color name="blue">#0000FF</color> 
    <color name="violet">#7F00FF</color> 
    <color name="magenta">#FF00FF</color> 
<array name="rainbow"> 
    <item>@color/bright_pink</item> 
    <item>@color/red</item> 
    <item>@color/orange</item> 
    <item>@color/yellow</item> 
    <item>@color/chartreuse</item> 
    <item>@color/green</item> 
    <item>@color/spring_green</item> 
    <item>@color/cyan</item> 
    <item>@color/azure</item> 
    <item>@color/blue</item> 
    <item>@color/violet</item> 
    <item>@color/magenta</item> 
</array> 

i od tego kodu Java

String[] array = context.getResources().getStringArray(R.array.animals_array); String randomStr = array[new Random().nextInt(array.length)];

//here you define your layout

LinearLayout myLayout = (LinearLayout) findViewById(R.id.that_linear);

myLayout.setBackgroundColor(Color.parseColor(randomStr));

+0

@ Phil3992 tylko addded definicja drogi, sprawdź to. – Kiloreux

4

Jest to znacznie lepsze rozwiązanie niż te przewidziane.

Jeśli chcesz uzyskać losowy kolor Naprawdę, "losowe" wybieranie z pliku res nie jest tak solidne.

Zamiast używać ten fragment kodu:

Random rnd = new Random(); 
    currentStrokeColor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
+0

Mam wartość -118692481300, z liczby całkowitej? – kemdo

0

można użyć ColorGenerator klasę dostać losowy color.code.

fragment podane poniżej

ColorGenerator generator = ColorGenerator.MATERIAL; 

int color=generator.getRandomColor(); 

tutaj można użyć odniesienie widok ustawić kolor jak

mUserName.setText("Suraj"); 

mUserName.setTextColor(color); //it will populate name with random color each time you open your activity 
+0

thanx za zmiany w formacie Vrund Purohit –