2016-08-04 19 views
0

Ich habe in meinem Layout zwei ImageViews erstellt, nennen wir sie imageviewTop und imageviewBottom.
Ich habe zwei Bilder in das Zeichenfeld gespeichert (green_image.png und red_image.png).
Ich habe auch eine Schaltfläche hinzugefügt und möchte, dass ich tun möchte, ist, wenn die Schaltfläche geklickt wird, wird einer der ImageViews zufällig ausgewählt und aus dem green_image wird es zu red_image geändert.Nach dem Zufallsprinzip wählen Sie eine von zwei ImageViews und aktualisieren ResourceImage

Ich habe bereits versucht, eine switch/case-Anweisung zu erstellen und eine Zufallszahl wie 1 oder 2 zu generieren.
Basierend auf dieser Zahl würde die case-Anweisung entweder das obere oder untere Bild aktualisieren.
Das funktioniert gut für 2 ImageViews, aber wenn ich 100 hätte, müsste ich 100 Fälle im Code erstellen.
Ich suche nach einer dynamischeren Option.

Ich weiß, wie man das Image für das ImageView, ich kämpfe mit dem Teil, wie man ein ImageView zufällig auswählt, wenn es möglich ist. Hier

ist der Code:

public class MainActivity extends Activity { 

    ImageView imagevieTop, imageviewBottom; 
    Button randomButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     imagevieTop = (ImageView) findViewById(R.id.imageViewTop); 
     imageviewBottom = (ImageView) findViewById(R.id.imageViewBottom); 
     randomButton = (Button) findViewById(R.id.buttonRandom); 

     randomButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // randomly select one of the two imageviews 
       // for example: randomly selected imageviewTop 
       // set imageresource red_image to imageviewTop 

       //at next start up it would select either top or bottom, 50%-50% and then assign the image to it 
      } 
     }); 
    } 
} 
+0

Warum generieren Sie nicht einfach die Koordinate von ImageView und das darin enthaltene Bild? ODER Sie können einfach einen Code schreiben wie int a = neu Random(). NextInt (100); x = (x - x% 4)/4 * mehrfach; y = x% 4 * mehrfach; imgId = a; dann einfach die Koordinaten der Bilder und Bild –

+0

Ich möchte die Bilder bereits im Voraus festlegen, so zum Beispiel beim Start sollte es immer 4 grüne Bilder an bestimmten Koordinaten und beim Klicken auf eine der Schaltflächen wird rot. – Gexo

Antwort

0

Sie sind nur einen Image nutzen könnten, und Randomisierung das Bild, das Sie zeichnen.

Alternativ können Sie dies anpassen, um ein Array von ImageViews zu verwenden. Deine Entscheidung.

Die gewünschte Zeile ist jedoch int index = random.nextInt(imgs.length);, um einen zufälligen Index aus der Liste zu erhalten.

public class MainActivity extends Activity { 

    int[] imgs = new int[] { R.drawable.green_image, R.drawable.red_image }; 
    Button randomButton; 

    private final Random random = new Random(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final ImageView imgView = (ImageView) findViewById(R.id.imageView); 
     randomButton = (Button) findViewById(R.id.buttonRandom); 

     randomButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int index = random.nextInt(imgs.length); 

       // randomly select one of the two drawables 
       int resId = imgs[index]; 

       // set imageresource imgView 
       Drawable d = getResources().getDrawable(resId); 
       imgView.setImageDrawable(d); 

      } 
     }); 
    } 
} 

Um das "100 ImageViews" Problem zu behandeln, würde ich nicht das Kopieren von 100 Zeilen Code, und statt Schleifen über angemessene ID-Werte empfehlen.

List<ImageView> imgViews = new ArrayList<ImageView>(); 
for (int i = 0; i < 100; i++) { 
    int resId = getResources().getIdentifier("imgView" + i, "id", getPackageName()); 
    ImageView nextImg = (ImageView) findViewById(resId); 
    imgViews.add(nextImg); 
} 
+0

Danke für die Antwort, ich überprüfe gerade, wenn es funktioniert, zusammen mit der Antwort unten könnte ich in der Lage sein, eine ArrayList zu erstellen, durchschleifen und dann nach dem Zufallsprinzip auswählen und aktualisieren. Gibt in ein paar Minuten eine Rückmeldung. – Gexo

+0

Es funktionierte perfekt zusammen mit der Antwort josemgu91, mit der zufälligen Bildansicht auswählen. Danke für die Hilfe! – Gexo

0

Falls Sie eine dynamische Auswahl von „n“ Image Elemente tun wollen, dann müssen Sie sie in einer Datenstruktur speichern (zum Beispiel ein Array, eine Liste, etc.). Zum Beispiel wird dieser Code eine zufällige Image aus einer Liste auswählen:

public ImageView getRandomImageView(final List<ImageView> imageViewList) { 
     final Random random = new Random(); 
     //The "nextInt" method works in the half-open range [0, n), so it'll never be equal to the list size. 
     final int randomElement = random.nextInt(imageViewList.size()); 
     return imageViewList.get(randomElement); 
    } 

In Ihrem Fall mit zwei Image des („imagevieTop“ und „imageviewBottom“) in festen Variablen deklariert dann würden Sie sie auf eine Liste übergeben müssen oder etwas ähnliches, um eines von ihnen dynamisch auszuwählen.

+0

Danke für deine Antwort, ich probiere es zusammen mit der Antwort von oben/unten aus. – Gexo

+0

Danke für die Hilfe, es hat funktioniert. Ich benutzte den Code, um eine ArrayList mit den von cricket_007 bereitgestellten Bildansichten zu füllen, und benutzte dann Ihre, um eine davon zufällig auszuwählen und zu aktualisieren. Vielen Dank! – Gexo

+0

Kein Problem, froh, Ihnen zu helfen =). – josemgu91