Frage

habe ich einige Beiträge über verzögertes Laden überprüft, aber ich glaube, mein Problem ist ein bisschen anders.

Ich habe eine Galerie (meine Klasse erweitert Galerie), die Displays 20 ziemlich groß Bilder (400-500K each). Ich kann sie alle zur Galerie nicht geladen werden, da ich eine OutOfMemory Exception.
Also, habe ich eine Reihe von 20 Drawables und zunächst die ersten neun Elemente bevölkert (die Bilder stammen aus dem Web) und stellen Sie den ganzen Rest zu null. Meine Absicht war: auf einem fling nach rechts, holt Element Nr. 10 und auf kein Nullelement. kein 0. schleudern andere nach rechts Element holen. 11 und auf kein Nullelement. 1 bis null. Gleiche Logik auf einem fling links.

Das Problem ist, ich kann schleudern viel schneller als die Elemente abgerufen werden. Meine Galerie hat eine BaseAdapter und seine getView () etwa wie folgt aussehen:

public View getView(int position, View  convertView, ViewGroup  parent){
     ImageView imageView = new ImageView();
     imageView.setDrawable(imageArray[position];
     ....
     ....

     return imageView;
}

Wie kann ich feststellen getView () - wenn imageArray [Position] ist immer noch null, zeigt ein „loading ...“ Dialog und sobald es ist Satz wiederholen, dich mit der gleichen Position
? Ich will nicht die Imageview leer und stellen Sie dann im laufenden Betrieb sehen. Ich möchte nicht in der Lage sein, den Imageview überhaupt zu sehen, bis er festgelegt ist.

Danke.

War es hilfreich?

Lösung

Galerie ist für die reibungslose Erfahrung gestaltet. Es wird sehr schlecht UI, wenn Sie den Bildschirm sperren und schalte nicht zum nächsten Bild, bis es abgeholt wird. Auf diese Weise Benutzer nicht in der Lage, überhaupt zu schleudern. Sie sollten statt Bild etwas Ladeanzeige angezeigt werden, während es geladen ist.

Ich denke, Ihr Szenario eher üblich ist. Sie sollten Bilder herunterladen und sie anzuzeigen. Wenn Sie erhalten OutOfMemory können Sie supersample Bilder versuchen Seltsam out of memory Problem während ein Bild in einem Bitmap-Objekt laden.

Wenn es noch ist OutOfMemory Sie Bitmaps aus dem Speicher entfernen soll und cachen sie auf SD. Also, wenn der Benutzer flings sichern Sie Bilder von SD wieder geladen werden kann, wird es schnell genug sein. Und der Speicherverbrauch niedriger sein wird. Wie Sie vorschlagen, können Sie die letzten 10 Bilder im Speicher und andere auf SD im Cache zwischengespeichert haben.

Sie können einen Blick auf meinem Beispielcode nehmen Faule Last der Bilder in Listview . Eigentlich ist es ein Listview-Adapter, aber man kann es zur Galerie mit geringfügigen Änderungen gilt. Ich denke, es wird genau das tun, was Sie brauchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top