listview 在滚动过程中 不该加载图片
来源:互联网 发布:淘宝如何解除绑定 编辑:程序博客网 时间:2024/04/29 20:55
原文:
http://blog.csdn.net/fuweiping/article/details/7888924
我自己在使用过程中整理了下。 发现其保存到SD卡部分,工作不大正常。
1: SyncImageLoader.java
import java.io.IOException;import java.io.InputStream;import java.lang.ref.SoftReference;import java.net.URL;import java.util.HashMap;import android.graphics.drawable.Drawable;import android.os.Handler;import com.efuture.staff.Global;import com.efuture.staff.mylog.Log;public class SyncImageLoader {private static final String TAG = "SyncImageLoader";private Object lock = new Object();private boolean mAllowLoad = true;private boolean firstLoad = true;private int mStartLoadLimit = 0;private int mStopLoadLimit = 0;final Handler handler = new Handler();private HashMap<String, SoftReference> imageCache = new HashMap<String, SoftReference>();public interface OnImageLoadListener {public void onImageLoad(Integer t, Drawable drawable);public void onError(Integer t);}public void setLoadLimit(int startLoadLimit, int stopLoadLimit) {if (startLoadLimit > stopLoadLimit) {return;}mStartLoadLimit = startLoadLimit;mStopLoadLimit = stopLoadLimit;}public void restore() {mAllowLoad = true;firstLoad = true;}public void lock() {mAllowLoad = false;firstLoad = false;}public void unlock() {mAllowLoad = true;synchronized (lock) {lock.notifyAll();}}public void loadImage(Integer t, String imageUrl,OnImageLoadListener listener) {final OnImageLoadListener mListener = listener;final String mImageUrl = imageUrl;final Integer mt = t;new Thread(new Runnable() {@Overridepublic void run() {if (!mAllowLoad) {if (Global.DBG) {Log.e(TAG, "prepare to load");}synchronized (lock) {try {lock.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}if (mAllowLoad && firstLoad) {loadImage(mImageUrl, mt, mListener);}if (mAllowLoad && mt <= mStopLoadLimit && mt >= mStartLoadLimit) {loadImage(mImageUrl, mt, mListener);}}}).start();}private void loadImage(final String mImageUrl, final Integer mt,final OnImageLoadListener mListener) {if (imageCache.containsKey(mImageUrl)) {SoftReference softReference = imageCache.get(mImageUrl);final Drawable d = (Drawable) softReference.get();if (d != null) {handler.post(new Runnable() {@Overridepublic void run() {if (mAllowLoad) {mListener.onImageLoad(mt, d);}}});return;}}try {final Drawable d = loadImageFromUrl(mImageUrl);if (d != null) {imageCache.put(mImageUrl, new SoftReference(d));}handler.post(new Runnable() {@Overridepublic void run() {if (mAllowLoad) {mListener.onImageLoad(mt, d);}}});} catch (IOException e) {handler.post(new Runnable() {@Overridepublic void run() {mListener.onError(mt);}});e.printStackTrace();}}public static Drawable loadImageFromUrl(String url) throws IOException {URL m = new URL(url);InputStream i = (InputStream) m.getContent();Drawable d = Drawable.createFromStream(i, "src");return d;}}
2: 我们自己的Activity 中:
private ListView mListView;SyncImageLoader syncimageloader = new SyncImageLoader(); mListView.setOnScrollListener(new OnScrollListener(){ public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case AbsListView.OnScrollListener.SCROLL_STATE_FLING: if(Global.DBG){ Log.e(TAG,"SCROLL_STATE_FLING"); } syncimageloader.lock(); break; case AbsListView.OnScrollListener.SCROLL_STATE_IDLE: if(Global.DBG){ Log.e(TAG,"SCROLL_STATE_IDLE"); } loadImage(); //loadImage(); break; case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: syncimageloader.lock(); break; default: break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); public void loadImage(){ int start = mListView.getFirstVisiblePosition(); int end =mListView.getLastVisiblePosition(); if(end >= mListData.size()){ end = mListData.size() -1; } syncimageloader.setLoadLimit(start, end); syncimageloader.unlock(); }
3:Adapter (这种Adapter 没有使用ViewHolder)
private class MyStoreGoodsAdapter extends BaseAdapter {public List<GoodsInfo> mData = new ArrayList<GoodsInfo>();private LayoutInflater inflater;private ImageLoader mImageLoader;SyncImageLoader.OnImageLoadListener imageLoadListener = new SyncImageLoader.OnImageLoadListener(){ @Override public void onImageLoad(Integer t, Drawable drawable) { if(mListView!=null){ View view = mListView.findViewWithTag(t); if(view != null){ ImageView iv = (ImageView) view.findViewById(R.id.iv_mystore_goods_list_image); iv.setBackgroundDrawable(drawable); } } } @Override public void onError(Integer t) { if(mListView!=null){ View view = mListView.findViewWithTag(t); if (view != null) { ImageView iv = (ImageView) view .findViewById(R.id.iv_mystore_goods_list_image); iv.setBackgroundResource(R.drawable.icon); } }} }; public MyStoreGoodsAdapter(Context pcontext) {inflater = LayoutInflater.from(pcontext);this.mImageLoader = new ImageLoader();}public void addData(List<GoodsInfo> datapiece){mData.addAll(datapiece);notifyDataSetChanged();}@Overridepublic int getCount() {if (mData == null) {return 0;} elsereturn mData.size();}@Overridepublic Object getItem(int position) {if (mData == null) {return null;} else if (position < mData.size()) {return mData.get(position);} elsereturn null;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View pconvertView,ViewGroup parent) {if(Global.DBG){Log.e(TAG, "--getView()--"+position);} if(pconvertView == null){ pconvertView = inflater.inflate(R.layout.mystore_goods_list_item, null); } pconvertView.setTag(position); ImageView holder_iv_mystore_goods_list_image = (ImageView) pconvertView.findViewById(R.id.iv_mystore_goods_list_image); TextView holder_tv_mystore_goods_list_title = (TextView) pconvertView.findViewById(R.id.tv_mystore_goods_list_title); TextView holder_tv_mystore_goods_list_tags_num = (TextView) pconvertView.findViewById(R.id.tv_mystore_goods_list_tags_num); TextView holder_tv_mystore_goods_list_fans_num = (TextView) pconvertView.findViewById(R.id.tv_mystore_goods_list_fans_num); GoodsInfo data = (GoodsInfo) mData.get(position); String imgUrl = null;if (data.images.size() > 0)imgUrl = data.images.get(0);if (imgUrl != null && !imgUrl.equals("")) {if(!TextUtils.isEmpty(imgUrl)){imgUrl = imgUrl.replace(HttpConstants.ORI, HttpConstants.DEF_VALUE_75);syncimageloader.loadImage(position,imgUrl,imageLoadListener); }}holder_tv_mystore_goods_list_title.setText(data.name);holder_tv_mystore_goods_list_tags_num.setText(String.valueOf(data.tags));holder_tv_mystore_goods_list_fans_num.setText(String.valueOf(data.fans));return pconvertView;}}
- listview 在滚动过程中 不该加载图片
- universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法
- universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法
- universal image loader在listview/gridview中滚动时禁止加载图片的处理
- universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法
- universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法
- ListView滑动过程中禁止加载图片
- ListView滑动过程中禁止加载图片
- ListView滑动过程中禁止加载图片
- ListView滑动过程中禁止加载图片
- ListView优化-在滚动的时候不加载图片
- ListView滚动时不加载图片
- ListView滚动时加载图片(只加载当前屏幕图片)
- android listview 滑动过程中不加载图片,停止时加载图片
- Android listview 滑动过程中不加载图片,停止时加载图片
- android listview滑动过程中不加载图片,停止时加载图片。
- 简单实现 Android listview 滑动过程中不加载图片,停止时加载图片
- 在Android中实现ListView图片异步加载一
- ios-循环等待完毕再进入
- Online Judge 警示录
- 删除cookie
- 专业英语——分析阶段
- 网页上图片为何无法显示?
- listview 在滚动过程中 不该加载图片
- 我的vimrc配置---备份(for C++/C)
- 搭建Android开发环境:直接使用官网提供的 ADT Bundle(带Eclipse、ADT插件、SDK)
- iPhone and iPad JavaScript dialogs (alert, confirm, prompt) and windows
- 从赌钱游戏看pagerank算法
- solaris挂载iso镜像\制作\复制
- SSH架构分页源代码
- BI需求调研四项及调研模板目录
- GoldenGate单向表DML同步