2017-01-30 2 views
0

Ich bin neu in Android-Programmierung. ich Handler bin mit Bildern zu ändern, aber es sollte nur für 30 Sekunden und danach will ich rufen eine andere AktivitätWie man den Handler nach einer bestimmten Zeit stoppt (in meinem Fall 30 Sekunden)?

Mein Code geschehen:

imageView = (ImageView) findViewById(R.id.imageView); 

final int[] imageArray = {R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d}; 

    final Handler handler = new Handler(); 
    Runnable runnable = new Runnable() { 
     int i = 0; 
     @Override 
     public void run() { 
      imageView.setImageResource(imageArray[i]); 
      i++; 
      if(i>imageArray.length-1){ 
       i= 0; 
      } 
      handler.postDelayed(this,100); 
     } 
    }; 
    handler.postDelayed(runnable, 3000); 

Wie kann ich diese Aktivität zu stoppen und rufen eine andere Tätigkeit nach 30 Sekunden? Bitte helfen

Antwort

1

1) Verzögerung in Millisekunden, wenn Sie jedes Bild ändern möchten

long startTime = System.currentTimeMillis(); 
    final Handler handler = new Handler(); 
    Runnable runnable = new Runnable() { 
     int i = 0; 
     @Override 
     public void run() { 
      imageView.setImageResource(imageArray[i]); 
      i++; 
      if(i>imageArray.length-1){ 
       i= 0; 
      } 
      if (System.currentTimeMillis() - startTime < 30000){ 
       handler.postDelayed(this,1000); 
      } else { 
       //TODO start second activity 
      } 
     } 
    }; 

oder Sie können: zweite handler.postDelayed(this,100); sollte handler.postDelayed(this,1000); (1 s = 1000 ms)

2) stoppen Aufgabe geändert werden Zeitplan zweiten runnable zu stoppen Bilder nach 30s ändern und eine andere Aktivität starten:

handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      handler.removeCallbacks(runnable); //stop next runnable execution 

      //TODO start second activity 
     } 
    }, 30000); 
1

Sie können versuchen, diese durch Timer mit .. unten auf den Code alle 1 Sekunden laufen, bis 30 Sekunden erreichen

this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       int globalTimer = 0; 

       // 30 times 30 * 1000 = 30000 == 30 seconds 
       int limitTimer = 30; 
       int i = 0; 

       // create Timer 
       Timer timer = new Timer(); 
       timer.schedule(new TimerTask() { 
        @Override 
        public void run() { 
         globalTimer++; 
         //run your code 
         imageView.setImageResource(imageArray[i]); 
         i++; 

         if(i>imageArray.length-1){ 
          i= 0; 
         } 

         //check if globalTimer is equal to limitTimer 
         if (globalTimer == limitTimer) { 
          timer.cancel(); // cancel the Timer 
          // jump to another activity 
          Intent intent = new Intent(Class.this,Name.class); 
          startActivity(intent); 
         } 
        } 

       }, 0, 1000); 
      } 
     }); 
+0

nur das Original-Thread, der eine Ansichtshierarchie erstellt wurden, können ihre Ansichten .. immer diese Fehlermeldung berühren ... Bitte helfen – iSukhi

+0

edit..use runOnUiThread – ZeroOne

+0

Liegt es daran, den Handler nicht zu benutzen? – iSukhi

Verwandte Themen