2010-07-30 14 views
6

Ich habe ein Array aller URIs der Bilder, die ich in einer Liste zeige. Jetzt möchte ich einen Thread im Hintergrund laufen lassen, der diese Bilder aus dem Internet holt und sie auf der SD-Karte speichert. Wenn ich also auf ein bestimmtes Element in der Liste klicke, anstatt es aus dem Internet zu holen, sollte es von der SD-Karte in der neuen Aktivität abrufen.Bilder im Hintergrund herunterladen, während die Listenansicht angezeigt wird

Wie mache ich das?

+0

Lesen Sie diesen Thread, gibt es eine Menge Informationen. http://stackoverflow.com/questions/541966/android-how-do-i-do-lazy-load-of-images-in-listview Ich bevorzuge Android-Universal-Image-Loader-Bibliothek https://github.com/nostra13/Android-Universal-Image-Loader, aber Sie können auch andere Lösungen finden. ich hoffe es hilft. –

Antwort

0

Prüfen Sie WebImageView von Matthias Käppler.

Sie können die Art der Zwischenspeicherung von Bildern durch die gewünschte SD-Karten-Funktion ersetzen.

0

Verwenden AsyncTask Download im Hintergrund, während zeigen Sie Ihre UI

File imageFile; 

speichern Bilder von Web-

public View getView(int position, View convertView, ViewGroup parent) {  
    imageFile = new File("/sdcard/jorgesysTemp/" + Arraypicname(position); 
    if(!imageFile.exists()){ 
    AsyncTaskProcess() //Download your images to sdcard 
    } 

Wenn Sie Ihre Listenansicht das Bild von der SD-Karte laden klicken

@Override 
    protected void onListItemClick(ListView l, View v, final int position, long id) { 
    //load from sdcard 
     Bitmap bitmapImg = BitmapFactory.decodeFile("/sdcard/jorgesysTemp/" + Arraypicname(position)); 
     BitmapDrawable drawableImg = new BitmapDrawable(bitmapImg);     
     myimageview.setImageDrawable(drawableImg); 
... 
... 
...  
2

Sie könnte versuchen, meine Lazy-DrawA verwenden bles Rahmen (GPL v3 lizenziert):

https://github.com/rtyley/lazy-drawables

-Leider ist es noch nicht ganz bereit für die Produktion, aber unter den Dingen, versucht es zu handhaben:

  • Hintergrund (nicht-UI-Thread) Laden von Bildressourcen
  • effizientes Caching von skalierten Bitmaps - für den Anwendungsfall, in dem Sie ein einzelnes großformatiges Bild herunterladen und es hunderte Male in einem kleineren Symbolformat in einem Listenansicht oder etwas
  • anzeigen möchten
  • Transparenz der Verwendung, durch die ich meine ...

... wenn Sie eine lazy-ziehbar Sitzung eingerichtet haben, ein Bild Ansicht bevölkern ist so einfach wie:

Drawable avatarDrawable = imageSession.get(someUserIdentifier); // doesn't block 
imageView.setImageDrawable(avatarDrawable); 

Sie don 't Pflege, dass es Ihnen möglicherweise sofort ein normales bitmapdrawable zurückgegeben hat, oder möglicherweise eine asynchrone Aufgabe hervorgebracht und einen Platzhalter zurückziehbar zurückgegeben hat - das Zeichen wird sich selbst aktualisieren und es Host ImageView, wenn die asynchrone Aufgabe abgeschlossen ist.

Das ist die Theorie sowieso. Es scheint sorta-ein bisschen Arbeit so weit, aber manchmal, dass spontane UI-Update passiert nicht ... nicht sicher warum: -}

Verwandte Themen