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.

46voto

jasonhudgins Punkte 2787

Die Art und Weise, wie ich es tue, ist durch das Starten eines Threads zum Herunterladen der Bilder im Hintergrund und übergeben Sie ihm einen Rückruf für jedes Listenelement. Wenn ein Bild fertig heruntergeladen ist, ruft es den Callback, der die Ansicht für das Listenelement aktualisiert.

Diese Methode funktioniert jedoch nicht sehr gut, wenn Sie Ansichten recyceln.

36voto

Arslan Anwar Punkte 18636

Ich möchte nur ein weiteres gutes Beispiel anführen, XML-Adapter . Da es von Google verwendet wird und ich auch die gleiche Logik verwende, um einen OutOfMemory-Fehler zu vermeiden.

Grundsätzlich dieser ImageDownloader ist Ihre Antwort (da sie die meisten Ihrer Anforderungen abdeckt). Einige können Sie auch in diesem implementieren.

33voto

droidment Punkte 555

Ich habe NetworkImageView aus der neuen Android Volley Library verwendet com.android.volley.toolbox.NetworkImageView und es scheint ziemlich gut zu funktionieren. Offenbar ist dies die gleiche Ansicht, die in Google Play und andere neue Google-Anwendungen. Ein Blick lohnt sich auf jeden Fall.

33voto

howettl Punkte 12111

Dies ist ein häufiges Problem unter Android, das von vielen Menschen auf verschiedene Weise gelöst wurde. Meiner Meinung nach ist die beste Lösung, die ich gesehen habe, die relativ neue Bibliothek namens Picasso . Hier sind die Highlights:

  • Open Source, aber unter der Leitung von Jake Wharton von ActionBarSherlock Ruhm.
  • Asynchrones Laden von Bildern aus dem Netzwerk oder aus Anwendungsressourcen mit einer Zeile Code
  • Automatisch ListView Erkennung
  • Automatisches Festplatten- und Speicher-Caching
  • Kann benutzerdefinierte Transformationen durchführen
  • Eine Vielzahl konfigurierbarer Optionen
  • Super einfache API
  • Häufig aktualisiert

29voto

Rahul Rawat Punkte 969

Nun, für die Ladezeit von Bildern aus dem Internet gibt es viele Lösungen. Sie können auch die Bibliothek verwenden Android-Abfrage . Dort finden Sie alle erforderlichen Aktivitäten. Vergewissern Sie sich, was Sie tun wollen und lesen Sie die Wiki-Seite der Bibliothek. Und lösen Sie die Beschränkung beim Laden von Bildern.

Dies ist mein Code:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.row, null);
    }

    ImageView imageview = (ImageView) v.findViewById(R.id.icon);
    AQuery aq = new AQuery(convertView);

    String imageUrl = "http://www.vikispot.com/z/images/vikispot/android-w.png";

    aq.id(imageview).progress(this).image(imageUrl, true, true, 0, 0, new BitmapAjaxCallback() {
        @Override
        public void callback(String url, ImageView iv, Bitmap bm, AjaxStatus status) {
            iv.setImageBitmap(bm);
        }
    ));

    return v;
}

Damit sollte das Problem des trägen Ladens gelöst sein.

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