论坛首页 移动开发技术论坛

ListView滚动时加载图片(只加载当前屏幕图片)

浏览 7853 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-11-04  

前些天写了一篇 关于

ListView只加载当前屏幕内的图片(解决list滑动时加载卡顿)的文章:

 

 http://androidturing.iteye.com/blog/1210672

这几天测试时发现了些可以改进的地方。

之前的方法确实能很有效的解决 :listview加载下一页时 因为图片较多异步加载的卡顿问题。

但是,发现在用手拖动ListView的时候,滚动出的item中的图片是不加载的。

 

原因是在onScrollStateChanged方法中监听,只能监听滚动状态的改变(拖动时它只执行一次),而在用手一直拖动时,系统是不回调onScrollStateChanged方法的,其中加载图片的方法自然是不会执行的!

 

为了让拖动列表时显示出来的item也加载图片,所以我添加了setOnTouchListener监听,便可完美解决这个问题:

/**
		 * list 触摸监听
		 */
		_listView.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub
				if(event.getAction() == MotionEvent.ACTION_MOVE&&_scrollState!=OnScrollListener.SCROLL_STATE_FLING){
					//这里加入加载图片的方法 和setOnScrollListener监听中的方法一样即可
				}
				return false;
			}
		});
 要注意的是 

当你的onTouchListener返回true时,那么touch事件就被拦截了,代表你自己处理了。onListItemClick变不会执行!!

返回false的话,就不会影响。

参加:

http://androidturing.iteye.com/blog/1210672

 

   发表时间:2011-11-05  
楼主,我最近也遇到和你一样的问题,请教下能否给下做图片异步记载的详细实现过程?谢谢。
0 请登录后投票
   发表时间:2011-11-07  
Reizsoon 写道
楼主,我最近也遇到和你一样的问题,请教下能否给下做图片异步记载的详细实现过程?谢谢。

ListView异步加载图片的方法网上的帖子已经很多了,这里我就不赘述了。我建议你使用handler+线程池+软引用 的方式实现
0 请登录后投票
   发表时间:2011-11-08  
这个问题比较复杂,一直没有找到很好的方法解决。。。。
0 请登录后投票
   发表时间:2011-11-08  
上一篇文章走了弯路了,为什么加载20条数据,就一定要一次性下载20张图片?为什么不是滚到哪下载到哪?

参考下这个实现吧。
http://code.google.com/p/android-imagedownloader/
0 请登录后投票
   发表时间:2011-11-08  
zhuixinjian 写道
上一篇文章走了弯路了,为什么加载20条数据,就一定要一次性下载20张图片?为什么不是滚到哪下载到哪?

参考下这个实现吧。
http://code.google.com/p/android-imagedownloader/

这个就是为了实现你说的这种功能啊,加载图片时并不是每次加载全部的,而是根据int firstVisibleItem,int visibleItemCount, int totalItemCount三个参数只加载当前屏幕item的图片。
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics