Rob*_*Rob 5 android lazy-loading image-gallery image-loading
我已经回顾了一些有关延迟加载的帖子,但我相信我的问题有点不同.
我有一个画廊(我的班级扩展画廊),它显示了20个相当大的图像(每个400-500K).我无法将它们全部加载到库中,因为我得到了OutOfMemory异常.
所以,我创建了一个包含20个Drawables的数组,最初填充了前9个元素(图像来自Web)并将所有其余元素设置为null.我的意图是这样的:向右倾斜,获取元素号.10并设置为null元素号.在另一个fling到右边的fetch元素没有.11并设置为null元素号.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,显示一个"loading ..."对话框,一旦设置,重复自己的位置相同?
我不想看到imageView为空,然后动态设置.我希望在设置之前根本看不到imageView.
谢谢.
Gallery旨在提供流畅的体验.如果您阻止屏幕并且在获取之前不切换到下一个图像,那将是非常糟糕的UI.这样用户就无法轻易投入.在加载时,您应该显示一些加载指示符而不是图像.
我认为你的情景很常见.您应该下载图像并显示它们.如果你得到OutOfMemory,你可以尝试超级采样图像在将图像加载到Bitmap对象时奇怪的内存不足问题.
如果还有OutOfMemory,你应该从内存中删除位图并将它们缓存到SD.因此,当用户回来时,您可以再次从SD加载图像,它将足够快.而且内存消耗会更低.正如你的建议你可以将10个最新的图像缓存在内存中,其他图像缓存在SD上.
您可以在ListView中查看我的示例代码Lazy load of images.实际上它是一个ListView适配器,但你可以通过微小的修改将它应用到图库.我认为它将完全符合您的需求.
归档时间: |
|
查看次数: |
8446 次 |
最近记录: |