簡體   English   中英

Android:在圖庫中延遲加載

[英]Android: lazy loading in Gallery

我查看了一些有關延遲加載的帖子,但我認為我的問題有所不同。

我有一個圖庫(我的課擴展了Gallery),其中顯示20張相當大的圖像(每個圖像400-500K)。 由於收到OutOfMemory異常,因此無法將它們全部加載到圖庫。
因此,我創建了一個包含20個Drawables的數組,並最初填充了前9個元素(圖像來自Web),並將所有其余元素設置為null。 我的意圖是這樣的:向右掠,獲取元素編號。 10並設置為空元素編號。 0.再次右移,獲取元素編號為0。 11並設置為空元素編號。 1到null。 左跳同樣的邏輯。

問題是我可以比獲取元素快得多。 我的畫廊有一個BaseAdapter,它的getView()看起來像這樣:

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

     return imageView;
}

我該如何告訴getView()-如果imageArray [position]仍然為null,則顯示一個“正在加載...”對話框,一旦設置,請在相同的位置重復自己的動作?
我不想看到imageView為空然后立即進行設置。 我希望在設置之前完全看不到imageView。

謝謝。

畫廊旨在提供流暢的體驗。 如果您阻塞屏幕並且在獲取圖像之前不要切換到下一張圖像,這將是非常糟糕的UI。 這樣,用戶將根本無法逃脫。 加載時,您應該顯示一些加載指示器而不是圖像。

我認為您的情況很普遍。 您應該下載圖像並顯示它們。 如果得到OutOfMemory,則可以嘗試將圖像超采樣,同時將圖像加載到Bitmap對象時出現內存不足問題

如果仍然有OutOfMemory,則應從內存中刪除位圖並將其緩存到SD。 因此,當用戶后退時,您可以再次從SD加載圖像,速度將足夠快。 並且內存消耗將更低。 如您所建議,您可以在內存中緩存10個最新圖像,而在SD上緩存其他圖像。

您可以看一下我的示例代碼ListView中的圖像的延遲加載 實際上,它是一個ListView適配器,但您可以對其進行少量修改即可將其應用於圖庫。 我認為它將完全滿足您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM