2016-04-01 10 views
-1

Es ist eine grundlegende App, wo Sie auf die Aufnahme klicken, wenn ein Bild erscheint. Ein Bild erscheint alle 5 Sekunden. Allerdings werden alle meine Bilder gleichzeitig mit dem folgenden Code geladen.Ich muss mehrere Bilder nacheinander in einem bestimmten Intervall laden

Ich rufe loadImage, um ein Bild zu laden, und dann ShootHandler, um es nach 5 Sekunden zu entfernen. Ich bin mir nicht sicher, ob ich AsyncTask oder so etwas verwenden muss.

void run() { 
    int i; 
    for(i = 0; i < imageList.length; i++) { 
     loadImage(i); 
     shootHandler(i); 
    } 
} 

private void shootHandler(final int trialNumber) { 

    loadImage(trialNumber); 
    handler.postDelayed(new Runnable() { 
     public void run() { 
      resetButtons(trialNumber); 
     } 
    }, 5000); 
} 

private void loadImage(int trialNumber) { 
    Glide.with(getApplicationContext()).load(R.drawable.red_btn).into(shoot); 
    int resID = getApplication().getResources().getIdentifier(imageList[trialNumber].name, "drawable", getApplicationContext().getPackageName()); 
    Glide.with(getApplicationContext()).load(resID).into(imageList[trialNumber].image); 
} 
+1

Alle Bilder Last auf einmal, weil 'loadimage (trialNumber);' ist nicht innerhalb eines Handlers –

+0

Das Einfügen in einen Handler würde keinen Unterschied machen, da postDelayed() den aufrufenden Thread nicht blockiert. Ich habe gerade versucht, das Bild für 1 Sekunde zu verzögern und alle Bilder erscheinen immer noch zur gleichen Zeit. – TraderJosh

+0

Sie sagten, Sie wollten eine Verzögerung, ich spreche nicht über den aufrufenden Thread. Sie haben eine For-Schleife, die 'loadImage' aufruft, ohne zu warten, also" alle Bilder gleichzeitig laden " –

Antwort

0

Sie scheinen, dass postDelayed blockiert den aufrufenden Thread zu erwarten, aber das ist falsch.

Wenn Sie diese nacheinander anrufen möchten, sollte jeder Anruf den nächsten Termin einplanen. Siehe https://stackoverflow.com/a/5996270/4388512

0

ich konnte nicht herausfinden, was Ihr Punkt ist aber Bilder in der schönsten Art und Weise laden Sie diese verwenden können:

final Handler handler = new Handler(); 
    new Runnable(){ 
     int counter = 0; 
     @Override 
     public void run() { 
      counter++; 
      if(counter == list.size()){ 
       return; 
      } 
      Picasso.with(context).load(list.get(counter - 1)).into(imageView); 
      handler.postDelayed(this, 5000); 
     } 
    }.run(); 
+0

Dieser Code funktioniert nicht – TraderJosh

+0

Stellen Sie sicher, dass Sie Picasso zu Ihrer Größe als Abhängigkeit hinzufügen –

Verwandte Themen