2081 Stimmen

Wie man Bilder in ListView in Android verzögert lädt

Ich verwende eine ListView um einige Bilder und die mit diesen Bildern verbundenen Beschriftungen anzuzeigen. Ich beziehe die Bilder aus dem Internet. Gibt es eine Möglichkeit, Bilder langsam zu laden, so dass die Benutzeroberfläche nicht blockiert wird, während der Text angezeigt wird, und die Bilder so angezeigt werden, wie sie heruntergeladen werden?

Die Gesamtzahl der Bilder ist nicht festgelegt.

13 Stimmen

Sie können verwenden GreenDroids AsyncImageView . Einfach anrufen setUrl .

8 Stimmen

Ich habe es benutzt. Es ist eine wunderbare Umsetzung. Schlechte Nachricht, dass AsyncImageView ist ein Teil eines großen GreenDroid Projekt, das Ihre Anwendung größer machen, auch in dem Fall, alles, was Sie brauchen, ist AsyncImageView. Auch scheint, GreenDroid Projekt ist nicht seit 2011 aktualisiert.

6 Stimmen

Sie können diese Bibliothek auch einmal ausprobieren: Android-http-image-manager die meiner Meinung nach die beste Lösung für asynchrones Laden von Bildern ist.

3voto

Samet Punkte 917

Ein anderer Weg, dies zu tun, ist durch Ihren Adapter in einem Thread in Ihrer getView() Methode:

Thread pics_thread = new Thread(new Runnable() {
    @Override
    public void run() {
        Bitmap bitmap = getPicture(url);
        if(bitmap != null) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    holder.imageview.setImageBitmap(bitmap);            
                    adapter.notifyDataSetChanged();
                }                       
            });             
        }       
    }                       
});

pics_thread.start();

Natürlich sollten Sie Ihre Bilder immer zwischenspeichern, um zusätzliche Operationen zu vermeiden. Sie könnten Ihre Bilder in einem HashMap-Array ablegen und prüfen, ob das Bild im Array vorhanden ist, wenn nicht, fahren Sie mit dem Thread fort oder laden Sie das Bild aus dem HashMap-Array. Überprüfen Sie auch immer, dass Sie nicht zu viel Speicher verbrauchen, denn Bitmaps und Drawables sind oft sehr speicherintensiv. Es liegt an Ihnen, Ihren Code zu optimieren.

3voto

redGREENblue Punkte 3016

In einigen Antworten wurde bereits die Verwendung verschiedener Bildbibliotheken wie Universal Image Loader und androidimageloader usw. erwähnt. Dies ist eine alte Frage, aber für alle, die immer noch nach so etwas suchen, gibt es mehrere solcher Bibliotheken für das Laden/Zwischenspeichern von Bildern.

2voto

Ali Ahsan Punkte 965

UPDATE : Wenn Sie nach einer Lösung im Jahr 2020 suchen, die von Kotlin Coroutines unterstützt wird, versuchen Sie Coil.

Coil ist ein Akronym für Coroutine Image Loader .

Eigenschaften

  1. Schnell: Coil führt eine Reihe von Optimierungen durch, darunter die Zwischenspeicherung im Speicher und auf der Festplatte, das Downsampling des Bildes im Speicher, die Wiederverwendung von Bitmaps, automatisches Anhalten/Abbrechen von Anfragen und vieles mehr.
  2. Leichtes Gewicht: Coil fügt ~2000 Methoden zu Ihrer APK hinzu (für Anwendungen, die bereits OkHttp und Coroutines verwenden), was vergleichbar ist mit Picasso und deutlich weniger als Gleiten y Fresko .
  3. Einfach zu bedienen: Die API von Coil nutzt die Sprachfunktionen von Kotlin für Einfachheit und minimale Boilerplate.
  4. Modern: Coil ist Kotlin-first und verwendet moderne Bibliotheken wie Coroutines, OkHttp, Okio und AndroidX Lifecycles.

Gradle-Einrichtung:

Coil ist erhältlich bei mavenCentral() .

implementation("io.coil-kt:coil:1.0.0")

Schnellstart

Um ein Bild in eine ImageView zu laden, verwenden Sie die Funktion load extension:

// URL
imageView.load("https://www.example.com/image.jpg")

// Resource
imageView.load(R.drawable.image)

// File
imageView.load(File("/path/to/image.jpg"))

oder auf Hintergrund-Threads

// Coil (suspends the current coroutine; non-blocking and thread safe)
val request = ImageRequest.Builder(context)
    .data(url)
    .size(width, height)
    .build()
val drawable = context.imageLoader.execute(request).drawable

Sie können auch migrieren von Picasso/Glide

Vollständige Dokumentation aquí

1voto

Yessy Punkte 888

Außer dem asynchronen Laden des Daten-Caches können Sie den UI-Cache benötigen, wie setViewCacheSize

Außer dem Laden der sichtbaren Artikeldaten kann es erforderlich sein, die annähernd sichtbaren Artikeldaten zu laden

Die AndroidX Paging Library ist eine weitere Option, mit der Sie zum Beispiel 10.000.000 Elemente aus einer SQLite-Datenbank in eine RecyclerView laden, zwischenspeichern und anzeigen können. PagedList

Beispiel: Angenommen, das sichtbare Element in der Listenansicht ist [6,7,8,9,10], dann müssen Sie möglicherweise [6,7,8,9,10] laden UND das Element [1, 2, 3, 4, 5] & [11, 12, 13, 14, 15] vorladen, weil der Benutzer wahrscheinlich zur Vor- oder Nachseite scrollt.

1voto

Rahul Punkte 2937

Gleiten

Glide ist ein schnelles und effizientes Open-Source-Medienverwaltungs-Framework für Android, das Medien-Dekodierung, Speicher- und Festplatten-Caching sowie Ressourcen-Pooling in einer einfachen und benutzerfreundlichen Oberfläche zusammenfasst.

Glide unterstützt das Abrufen, Dekodieren und Anzeigen von Videostandbildern, Bildern und animierten GIFs. Glide verfügt über eine flexible API, die es Entwicklern ermöglicht, nahezu jeden Netzwerk-Stack zu nutzen. Standardmäßig verwendet Glide einen benutzerdefinierten, auf HttpUrlConnection basierenden Stack, enthält aber auch Dienstprogramm-Bibliotheken, die sich stattdessen in das Volley-Projekt von Google oder die OkHttp-Bibliothek von Square einfügen.

Glide.with(this).load("your-url-here").into(imageView);

Das Hauptaugenmerk von Glide liegt darauf, das Scrollen einer Liste von Bildern so reibungslos und schnell wie möglich zu gestalten, aber Glide ist auch für fast alle Fälle geeignet, in denen Sie ein entferntes Bild abrufen, in der Größe verändern und anzeigen müssen.

Gleitende Bibliothek

Picasso

Verwenden Sie die Picasso-Bibliothek von Jake Wharton. (Eine perfekte ImageLoading Library vom Entwickler von ActionBarSherlock)

Eine leistungsstarke Bibliothek zum Herunterladen und Zwischenspeichern von Bildern für Android.

Bilder verleihen Android-Anwendungen den dringend benötigten Kontext und visuelles Flair. Picasso ermöglicht das mühelose Laden von Bildern in Ihrer Anwendung - oft in einer einzigen Code-Zeile!

Picasso.with(context).load("your-url-here").into(imageView);

Viele gängige Probleme beim Laden von Bildern auf Android werden von Picasso automatisch gelöst:

Handhabung von ImageView Recycling und Downloadabbruch in einem Adapter. Komplexe Bildtransformationen mit minimalem Speicherverbrauch. Automatische Zwischenspeicherung von Speicher und Festplatte.

Picasso-Bibliothek

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X