我已经回顾了一些有关懒惰加载的帖子,但我相信我的问题有些不同。

我有一个画廊(我的班级扩展画廊),显示20个尺寸相当大的图像(每张400-500K)。我无法将它们全部加载到画廊,因为我得到了一个异常异常。
因此,我创建了一个20个可抽签的数组,最初填充了前9个元素(图像来自Web),并将其余的所有元素设置为NULL。我的意图是:在右边的fling futth,提取元素上。 10并设置为空元素编号。 0.在另一个fl到正确的获取元件上。 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() - 如果ImakeArray [位置]仍然为空,请显示“加载...”对话框,一旦将其设置为相同的位置,请重复自己?
我不想看到imageView空的,然后即时设置。我希望在设置它之前根本看不到图像视图。

谢谢。

有帮助吗?

解决方案

画廊设计为平稳的体验。如果您阻止屏幕,并且不切换到下一个图像,则它将是非常糟糕的UI。这样,用户将根本无法逃走。您应该在加载时显示一些加载指示器而不是图像。

我认为您的情况很普遍。您应该下载图像并显示它们。如果您获得户外信息,则可以尝试取代图像 将图像加载到位图对象时,奇怪的记忆问题出现了.

如果仍有OutofMemory,则应从内存中删除位图并将其缓存到SD。因此,当用户回飞回去时,您可以再次从SD加载图像,它将足够快。并且记忆消耗将较低。如您所建议,您可以在记忆中缓存10张最新图像,而在SD上缓存了其他图像。

您可以看一下我的示例代码 ListView中的图像懒负载. 。实际上,这是一个listView适配器,但您可以将其应用于图库,并进行较小的修改。我认为这将完全完成您的需求。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top