我有一个ListView
,可以异步地将图像加载到ImageView
。要实现这一点,我使用的是Android-Universal-Image-Loader
但我想在列表视图中看到它们时才开始加载这些图像。例如,如果列表视图的可见项目是5到9,则只应加载那些项目。此外,如果用户滚动非常快ListView
,只有在停止时才应加载这些项目。
最好的方法是什么?
答案 0 :(得分:4)
如果您在listview适配器中使用“查看重用”,那么您不应该做任何事情。 UIL为你做。 UIL不会加载所有滚动图像,只会加载任务池中的图像(您可以在配置中设置设置池大小)。如果使用“查看重用”,则不会加载快速滚动的图像。 查看GitHub上的示例项目。
UPD :自1.7.0版以来,UIL有 PauseOnScrollListener
。
boolean pauseOnScroll = true;
boolean pauseOnFling = true;
listView.setOnScrollListener(new PauseOnScrollListener(pauseOnScroll, pauseOnFling));
答案 1 :(得分:1)
使用OnScrollListener,当ListView在onScrollStateChanged()
,SCROLL_STATE_IDLE
(较慢滚动)和SCROLL_STATE_TOUCH_SCROLL
之间切换时,会调用SCROLL_STATE_FLING
方法(更快滚动) )。使用此功能,您可以选择仅在状态为“空闲”或“触摸”时加载新图像。
添加
在第一次运行中,不显示ListView的可见项。例如,当应用程序启动时,如果ListView有4个项目可见,则应加载这4个图像。
我自己没有使用过Universal Image Loader,但是从下面描述的内容中你需要知道在开始下载之前会显示多少行。试试这个:
例如:
private Runnable loadImages = new Runnable() {
@Override
public void run() {
// Start the asynchronous downloads
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
mListView.post(loadImages);
}
在绘制ListView之后,loadImages
将被称为,因此您将确切知道可见的行数。