我有一个延迟加载的 ListView,其中填充了通过网络获取的图像。列表行设置为 wrap_content,因此一旦加载图像,它就会调整大小并显示全尺寸图像。向下滚动时看起来很棒,但是向上滚动行时会调整大小并强制底部行离开屏幕。如何在向上滚动时防止这种跳跃的滚动?
- - - 编辑:
这些图像是不同大小的漫画。有些是 2 或 3 帧,它们不是很高。其他的是单帧漫画,它们要高得多。图片需要占据整个宽度,高度不应该切断任何漫画。
假设所有下载的图像预计大小相同,大多数开发人员使用的一个好的解决方案是使用“虚拟”图像,直到加载真实图像。该图像将存在于本地,因此几乎可以立即加载。在该getView
方法中,显示这个虚拟图像,直到下载了真实图像,然后简单地替换它。这将防止您的行调整大小。
你必须看到这个链接它在后台线程中下载图像。图像被缓存在 SD 卡和内存中,它使用 inSampleSize 解码图像以减少内存消耗并尝试正确处理回收的视图。当图像未完全下载时播放假图像。“对不起音乐!!”
我想出了解决方案。当我收到图像时,我从父级获取宽度,然后将图像视图的高度设置为 parentWidth * bitmapHeight / bitmapWidth。这样,在创建行视图时会发生调整大小,并且一旦我知道位图的大小,列表就不会跳动太多。