Bilder als "Video" anzeigen

  • Themenstarter Themenstarter Gerhard55
  • Beginndatum Beginndatum
G

Gerhard55

Gast
Hallo,

ich würde gerne eine große Anzahl auf der SD Karte gespeicherte Bilder in schnell hintereinander anzeigen lassen um das ganze quasi wie einen Film aussehen zu lassen. Mit folgendem Ansatz hatte ich bisher leider nur wenig Erfolg bzw. es wird immer nur das erste Bild angezeigt:

Code:
        ImageView iv = (ImageView)findViewById(R.id.imageViewer);
        List<Bitmap> pics = new ArrayList<Bitmap>();
        
        for (int i = 0; i < 50; i++)
        {
    		Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/bild" + (i+1) + ".jpeg");
    		pics.add(i, bitmap);
        }
        
        for (int i = 0; i < 50; i++)
        {
        	iv.setImageBitmap(pics.get(i));
        	try {
				Thread.sleep(200);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
        }

Hat jemand einen Tipp für mich wie ich dieses Problem lösen kann?

Vielen Dank!
 
Wird zufällig nach 10 Sekunden das letzte Bild angezeigt? Ich vermute, dass man da einen eigenen Thread braucht, der alle 200ms einen Befehl zum Austauschen der Bilder auf den UI-Thread legt (und nur in diesem eigenen Thread dürfte dann das Thread.sleep vorkommen!)
 
Hey,

ja es gibt es eine kurze Pause und dann wird das letzte Bild angezeigt.

ich habe es nun folgendermaßen probiert, allerdings ist der Effekt der gleiche ;(

Code:
        Handler handler = new Handler(); 
        for ( int i = 0; i < 50; i++)
        {
            handler.postDelayed(new Runnable() { 
                 public void run() { 
                 	iv.setImageBitmap(pics.get(picCounter));
                	picCounter++;
                 } 
            }, 5000); 
        }

Wäre wirklich super wenn du mir helfen könntest!
Vielen Dank
 
Ich bin kein Android-Experte, aber schau mal auf Processes and Threads | Android Developers beim Abschnitt "Worker Threads", das Snippet, das mit "For example, you can fix the above code..." überschrieben ist - das sollte schon recht nah an dem sein, was du vorhast.

UNGETESTET (und verbehaltlich meines mangelnden Wissens) könnte es ETWA so aussehen
Java:
public void onClick(View v) {
    new Thread(new Runnable() {
        public void run() {
            for ( int i = 0; i < 50; i++)
            {
                final int current = i;
                iv.post(new Runnable() {
                    public void run() {
                        iv.setImageBitmap(pics.get(current));
                    }
                });
                try {
                   Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            } 
        }

    }).start();
}
 

Zurück
Oben