package cn.edu.chd.adapter; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Point; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import cn.edu.chd.utils.BitmapLruCacheHelper; import cn.edu.chd.utils.NativeImageLoader; import cn.edu.chd.utils.NativeImageLoader.NativeImageLoaderCallback; import cn.edu.chd.yitu.R; /** * @author Rowand jj * *ͼƬ������ * ���ܣ�1.���ȴӻ����л�ȡͼƬ�������ȡ�����ٴ�·���м��� * 2.����ʱֹͣ���أ�����������ʼ���� */ public class YiImageAdapter extends BaseAdapter implements OnScrollListener { private static final String TAG = "YiImageAdapter"; /** * �󶨵�GridView���� */ private GridView g; /** * ������ */ private Context context; /** * ���� */ private List<String> data; /** * ͼƬ������ */ private NativeImageLoader imageLoader; /** * �Ƿ��һ�ν��� */ private boolean isFirstEnter = true; private Point mPoint; private int mFirstVisibleItem; private int mVisibleItemCount; public YiImageAdapter(Context context, List<String> data, GridView g, Point point) { this.context = context; this.data = data; this.g = g; this.mPoint = point; //��ʼ��ͼƬ������ this.imageLoader = NativeImageLoader.getInstance(); //�󶨹����¼������� g.setOnScrollListener(this); } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; final ImageView imageView; String path = data.get(position); if (convertView == null) { holder = new ViewHolder(); //�Ӳ����ļ��м��ز��� convertView = LayoutInflater.from(context).inflate(R.layout.gridview_item_my_works,null); holder.imageView = (ImageView) convertView.findViewById(R.id.my_works_item_image); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } imageView = holder.imageView; imageView.setTag(path); Bitmap bitmap = BitmapLruCacheHelper.getInstance().getBitmapFromMemCache(path); if (bitmap != null) { imageView.setImageBitmap(bitmap); } else { imageView.setImageResource(R.drawable.default_bg); } return convertView; } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { Log.i(TAG,"SCROLL STATE CHANGE.."); if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE)// ����ֹͣʱ��������ͼƬ { showImage(mFirstVisibleItem, mVisibleItemCount); } else { cancellTask(); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { mFirstVisibleItem = firstVisibleItem; mVisibleItemCount = visibleItemCount; if (isFirstEnter && visibleItemCount > 0) { showImage(firstVisibleItem, visibleItemCount); isFirstEnter = false; } } /** * ��ʾͼƬ���ȴӻ������ң����û�ҵ��Ϳ����߳����� * * @param firstVisibleItem * ��һ���ɼ����id * @param visibleItemCount * �ɼ�������� */ private void showImage(int firstVisibleItem, int visibleItemCount) { for (int i = firstVisibleItem; i < firstVisibleItem + visibleItemCount; i++) { String mImageUrl = data.get(i); final ImageView mImageView = (ImageView) g.findViewWithTag(mImageUrl); imageLoader.loadNativeImage(mImageUrl, mPoint,new NativeImageLoaderCallback() { @Override public void onImageLoad(Bitmap bitmap, String path) { if(mImageView != null && bitmap!=null) { mImageView.setImageBitmap(bitmap);//���غ�ֱ�����õ�view������ } } }); } } /** * ȡ������ */ public void cancellTask() { imageLoader.cancellTask(); } private static class ViewHolder { private ImageView imageView; } }