2014-09-18 14 views
5

Quello che voglio è quando carico la mia app in modo casuale avere un determinato sfondo colorato da un elenco predefinito di stringhe memorizzate in un file xml di valori chiamato colori.Android: Imposta lo sfondo a colori casuali su crea

Quello che ho attualmente è un set di colori come lo sfondo definito attraverso il codice colore stringa utilizzando l'editor GUI in eclissi.

Per la vita di me non riesco a capire come ottenere lo sfondo per selezionare casualmente una delle 9 stringhe e visualizzarla ogni volta che l'attività viene attivata.

La guida su questo sarebbe inestimabile.

risposta

34

In 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> 

In onCreate()

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

È possibile impostare una variabile Random rnd = new Random(); come un numero casuale (genererà un numero psuedo-casuale compreso tra 0 e 1). Allora si potrebbe dire:

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 

In questo modo, il numero casuale rnd determinerà quale colore lo sfondo è di volta in volta onCreate() si chiama.

4

Penso che potrei trovare un approccio semplice ma alcuni per quanto a lungo da implementare, si sceglie il colore casuale da una matrice definita di colori e si analizza il colore della stringa sullo sfondo.

<?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> 

e di questo codice 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 solo addded la definizione cara, check it. – Kiloreux

4

C'è una risposta molto meglio di quelli previsti.

Se si desidera un colore casuale Veramente, la scelta "casuale" da un file res non risulta essere altrettanto robusta.

Invece, utilizzare questo frammento di codice:

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

ho ottenuto il valore -118692481300, da numero intero? – kemdo

0

è possibile utilizzare ColorGenerator classe per ottenere casuale color.code.

frammento riporta di seguito

ColorGenerator generator = ColorGenerator.MATERIAL; 

int color=generator.getRandomColor(); 

qui è possibile utilizzare il riferimento al fine di impostare il colore come

mUserName.setText("Suraj"); 

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

Grazie per aver apportato modifiche nel formato Vrund Purohit –