Bild anzeigen vor Thread.sleep()

L

Lilithian

Ambitioniertes Mitglied
23
Hallo,

ich programmiere zur Zeit ein Memory-Spiel. Es funktioniert auch soweit, aber ich möchte, dass die zwei Karten erst zwei Sekunden angezeigt bleiben, bevor sie wieder umgedreht oder entfernt werden.
Ich habe nun versucht, dass ganze mit einem Thread zu lösen, jedoch wird dann erst Thread.sleep ausgeführt und danach das Bild angezeigt. Die Lösungen von Google und hier im Forum haben mir auch nicht wirklich weiter geholfen, habe nun schon versucht das Anzeigen des Bildes in einem Thread zu machen (Fehler da Threads nicht auf Views zugreifen dürfen) oder das vergleichen der Karten in einem Thread zu bearbeiten, aber auch dann wird erst Thread.sleep() ausgeführt bevor man die Karte sieht oder es irgendwie mit Notify oder so hinzubekommen, aber nichts funktioniert so wirklich. Wie muss ich das ganze machen, damit das Programm erst die Karte anzeigt und dann 2 Sekunden wartet? Danke schon mal für eure Hilfe.

Zur Zeit sieht mein Versuch wie folgt aus (funktioniert, aber zeigt das Bild nicht vorher an, hab den Code hier etwas gekürzt)

Code:
public void onClickKarte(final View Karte) {
        ... (id der Karte finden)
        ImgKarte.setImageResource(id);
        if (aufgedeckt == 0) {           
            karte1 = (pos + 1);
            aufgedeckt = 1;
            return;
        }
        if (aufgedeckt == 1) {
            karte2 = (pos + 1);   
            vergleicheKarten();
        }      
    }
    
    public void vergleicheKarten(){
        class MyThread extends Thread {
            private boolean status = false;
            public boolean ready = false;
            
            public boolean getStatus (){
                return this.status;
            }
            
            public void run (){
                   try {
                    sleep(2000);
                } catch (InterruptedException e) {}    
                if (karten[karte1 - 1].equals(karten[karte2 - 1])) {
                    this.status = true;
                } else {
                    this.status = false;
                }
                this.ready = true;
            }
        }
        ... (finden der beiden Karten als ImgKarte1 und ImgKarte2)

        MyThread thread = new MyThread ();
        thread.start ();
        while (true){
            if (thread.ready) {
                if (thread.getStatus ()) {
                    ... (Karten unsichtbar machen)
                } else {
                    ... (Karten wieder umdrehen)
                }
                aufgedeckt = 0;
                ... (Score-Text setzen)
                break;
            }
        }
 
Wie muss ich das ganze machen, damit das Programm erst die Karte anzeigt und dann 2 Sekunden wartet? Danke schon mal für eure Hilfe.

Ich würde das so machen:
beim Klick auf Karte wird diese aufgedeckt. Dabei erstellst du ein Runnable für die Karte, welches diese wieder umdreht. Dieses Runnable gibst du einem Handler undzwar mit der Methode postDelayed(Runnable, 2000), sodass er das Runnable erst in 2s ausführen wird.
 
  • Danke
Reaktionen: Lilithian
Perfekt, es funktioniert.
Danke schön. ;)
 

Ähnliche Themen

B
Antworten
6
Aufrufe
1.049
jogimuc
J
D
  • Data2006
3 4 5
Antworten
84
Aufrufe
3.643
jogimuc
J
softwaretk
Antworten
3
Aufrufe
1.200
swa00
swa00
Zurück
Oben Unten