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.

17voto

Soham Punkte 4890

Novoda hat auch eine große Bibliothek für träges Laden von Bildern und viele Anwendungen wie Songkick, Podio, SecretDJ und ImageSearch nutzen ihre Bibliothek.

Ihre Bibliothek wird gehostet aquí auf Github und sie haben eine ziemlich aktive Problemverfolgungssystem auch. Ihr Projekt scheint auch ziemlich aktiv zu sein, mit über 300+ Commits zum Zeitpunkt des Schreibens dieser Antwort.

16voto

Zankrut Parmar Punkte 1612

Wenn Sie das Shimmer-Layout wie Facebook anzeigen möchten, gibt es dafür eine offizielle Facebook-Bibliothek. FaceBook Shimmer Android

Es kümmert sich um alles, Sie müssen nur Ihr gewünschtes Design Code in verschachtelter Weise in Schimmer Rahmen setzen. Hier ist ein Beispielcode.

<com.facebook.shimmer.ShimmerFrameLayout
     android:id=“@+id/shimmer_view_container”
     android:layout_width=“wrap_content”
     android:layout_height="wrap_content"
     shimmer:duration="1000">

 <here will be your content to display />

</com.facebook.shimmer.ShimmerFrameLayout>

Und hier ist der Java-Code dafür.

ShimmerFrameLayout shimmerContainer = (ShimmerFrameLayout) findViewById(R.id.shimmer_view_container);
shimmerContainer.startShimmerAnimation();

Fügen Sie diese Abhängigkeit in Ihre gradle-Datei ein.

implementation 'com.facebook.shimmer:shimmer:0.1.0@aar'

So sieht es aus. Shimmer Android screenshot

15voto

Nicolas Jafelle Punkte 2551

Prüfen Sie meine Gabelung von LazyList . Im Grunde verbessere ich die LazyList, indem ich den Aufruf der ImageView verzögere und zwei Methoden erstelle:

  1. Wenn Sie etwas wie "Loading image..." eingeben müssen
  2. Wenn Sie das heruntergeladene Bild anzeigen möchten.

Ich habe auch den ImageLoader verbessert, indem ich eine Einzelperson in diesem Objekt.

12voto

Akber Punkte 501

Alle oben genannten Codes haben ihren eigenen Wert, aber nach meiner persönlichen Erfahrung sollten Sie es einfach mal mit Picasso versuchen.

Picasso ist eine Bibliothek speziell für diesen Zweck, in der Tat wird es Cache und alle anderen Netzwerk-Operationen automatisch verwalten Sie müssen die Bibliothek in Ihrem Projekt hinzufügen und schreiben Sie nur eine einzige Zeile Code, um Bild von Remote-URL zu laden.

Bitte besuchen Sie hier: http://code.tutsplus.com/tutorials/Android-sdk-working-with-picasso--cms-22149

11voto

Saket Kumar Punkte 453

Verwenden Sie die Glide-Bibliothek. Es funktionierte für mich und wird für Ihren Code too.it funktioniert sowohl für Bilder als auch gifs zu arbeiten.

ImageView imageView = (ImageView) findViewById(R.id.test_image); 
    GlideDrawableImageViewTarget imagePreview = new GlideDrawableImageViewTarget(imageView);
    Glide
            .with(this)
            .load(url)
            .listener(new RequestListener<String, GlideDrawable>() {
                @Override
                public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {                       
                    return false;
                }

                @Override
                public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                    return false;
                }
            })
            .into(imagePreview);
}

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