我有一个列表视图,显示包含来自网络的图像的行。
一旦需要绘制一行Adapter.getView(...)
,我会在后台下载图像并将其设置为ImageView
UI 线程中的 。这意味着位图以延迟的方式设置到 ImageView 中。
我用简单的可绘制资源尝试了延迟的 setImage...() ,结果是一样的。
我观察到以延迟方式设置资源会导致整个列表从位置 0 开始重新绘制,甚至没有显示 - 直到显示的位置。明显的问题是列表滚动缓慢且跳跃且不流畅。
我在这里要格外小心:滚动一点时会发生这种情况。新看到的项目确实被绘制为常规的一部分makeAndAddView
。但是,紧接着所有通向可见行的行都被绘制为measureHeightOfChildren
.
立即设置图像而不是延迟不会导致onMeasure
调用。
那么如何防止重新绘制所有列表,为什么立即 setImage 和延迟之间的行为不同?