我有一个 ViewPager,用于分页浏览多个 ImageView(大约 1000 个),每个 ImageView 加载一个全屏位图。我使用 options.inSampleSize
对图像进行二次采样,并使用内存缓存来提高性能,但这仍然不够快。我试图避免的是用户在快速翻阅 View 时看到空白的 ImageView。
我想知道是否有一种方法可以在加载请求的图像时提供部分渲染的图像(或低质量)。
我注意到 Android 图库包含类似的内容(在放大和缩小时尤其明显,加载看起来类似于在网络上加载渐进式 JPEG),但我无法找到任何相关信息。
最佳答案
Android 目前不提供在解码期间获取中间图像的方法(例如渐进式 JPEG)。您只能得到一张最终图像。
您已经在使用 inSampleSize 来获取图像的更粗糙版本。这使得解码有望更快,尽管没有时间保证:它在幕后使用 libjpeg。您测量过每个图像解码需要多长时间吗?您是否尝试过将 inPreferQualityOverSpeed 设置为 false?您是否重复使用相同的位图(也可能加快解码速度)。您还可以检查 inSampleSize 的速度是否有所不同。
无论如何,如果您随后想要同一图像的更详细版本,那么快速获取低质量图像的任何工作都会丢失,因为您必须从头开始解码。因此,您希望将解码限制为可见图像及其近邻图像,以便可以滚动而不显示空白图像。
关于java - Android 上的渐进式图像加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18449404/