kostenloser Webspace werbefrei: lima-city


Android - Zeitleiste - 10 Sekunden Rhythmus

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Hallo zusammen,

    ich habe eine Art Spiel, bei dem man 10 Sekunden pro Runde Zeit hat, um etwas zu machen. Nach den 10 Sekunden startet direkt eine neue Runde. Während einer Runde füllt sich eine ProgressBar, so dass sie nach den 10 Sekunden voll ist. Dazu habe ich mir folgendes zusammen gebastelt:

    public void starteRunde() {
    	progressStatus = 0;
    	
    	// hier passiert was
    
    	new Thread(new Runnable() {
    		public void run() {
    			while (progressStatus < 100) {
    				progressStatus += 1;
    				// Update the progress bar and display the
    				// current value in the text view
    				pbHandler.post(new Runnable() {
    					public void run() {
    						pbTimeline.setProgress(progressStatus);
    					}
    				});
    				try {
    					// Sleep for 100 milliseconds.
    					Thread.sleep(100);
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    	}).start();
    	
    	Handler handler = new Handler();
    	Runnable runnable = new Runnable() {
    		@Override
    		public void run() {
    			if(rundenNr++ < 9){
    				starteRunde();
    			}
    		}
    	};
    	handler.postDelayed(runnable, 10000);
    }


    Wie gesagt, ist nur zusammen gebastelt und vermutlich nicht sehr gut umgesetzt^^ Wer eine bessere Lösung kennt darf sie mir gerne verraten :)

    Auf jeden Fall ist es jetzt so, dass die erste Runde normal läuft. In der zweiten Runde füllt sich die ProgressBar schon in 5 Sekunden und nach weiteren 5 Sekunden geht die neue Runde los. In der füllt sich die ProgressBar wieder normal in 10 Sekunden usw. Also jede zweite Runde füllt sich der Balken in 5 Sekunden. Und ich verstehe nicht warum. Weiß jemand woran das liegen könnte?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Threads sind da immer etwas tückisch. Überleg mal was passiert, wenn der Thread für die Progressbar aus irgendeinem Grund ein bisschen länger als die 10sek braucht, in starteRunde "progressStatus" aber schon wieder auf 0 gesetzt wurde.
    Mein Vorschlag wäre etwas in der Art, so hast Du mehr Kontrolle darüber, dass alles in der richtigen Reihenfolge abläuft:
    public void starteRunde() {
        progressStatus = 0;
        // Hier passiert was
        Runnable progress = new Runnable() {
            public void run() {
                pbTimeline.setProgress(++progressStatus % 101);
                if (progressStatus == 101) {
                    starteRunde();
                } else {
                    pbHandler.postDelayed(this, 100);
                }
            }
        };
        if (rundenNr++ < 10) {
            pbHandler.post(progress);
        }
    }

    Hat den netten Nebeneffekt, dass es auch wesentlich kürzer ist. Allerdings ungetestet!
    Wenn Du ganz genau 10 Sekunden haben willst, müsstest Du allerdings die Zeit messen, da ja durch die Methodenaufrufe auch Zeit vergeht etc. Aber ich denke für deine Anwendung sollte das erst mal passen. Ist ja bei deiner Lösung auch nicht anders.

    Beitrag zuletzt geändert: 18.5.2015 0:05:43 von davidlw
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!