1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Bild anzeigen vor Thread.sleep()

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Lilithian, 29.10.2010.

  1. Lilithian, 29.10.2010 #1
    Lilithian

    Lilithian Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    69
    Erhaltene Danke:
    23
    Registriert seit:
    26.10.2010
    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;
                }
            }
     
  2. Fr4gg0r, 29.10.2010 #2
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    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.
     
    Lilithian bedankt sich.
  3. Lilithian, 29.10.2010 #3
    Lilithian

    Lilithian Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    69
    Erhaltene Danke:
    23
    Registriert seit:
    26.10.2010
    Perfekt, es funktioniert.
    Danke schön. ;)
     

Diese Seite empfehlen