# Bilder als "Video" anzeigen



## Gerhard55 (24. Aug 2011)

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:


```
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!


----------



## Marco13 (24. Aug 2011)

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!)


----------



## Gerhard55 (24. Aug 2011)

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 ;(


```
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


----------



## Marco13 (24. Aug 2011)

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

```
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();
}
```


----------

