利用AsyncTask异步加载,实现平滑滑动加载网络图片,AsyncTask代码:
public class ImageLoadTask extends AsyncTask<Void, Void, Void> {
private int position;
private ImageView image;
// 初始化
public ImageLoadTask(Context context,int position,ImageView image) {
this.position = position;
this.image = image;
}
@Override
protected Void doInBackground(Void... params) {
Bean bean = beans.get(position);
Bitmap bitmap = BitmapFactory.decodeStream(
// 加载图片的方法
Request.HandlerData(ImagePath[position]));
bean.setImage(bitmap);
bean.setFlag(true);
publishProgress(); // 通知去更新UI
return null;
}
public void onProgressUpdate(Void... voids) {
if (isCancelled())
return;
image.setImageBitmap(beans.get(position).getImage());
}
}
Adapter代码:
public class ImageAdapter extends BaseAdapter {
public ImageAdapter(Context context) {
}
@Override
public int getCount() {
return beans.size();
}
@Override
public Bean getItem(int position) {
return beans.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(getApplicationContext());
Bean b = beans.get(position);
//如果有图片则读取,没有则跳过
i.setImageBitmap(b.getImage());
if (b.getFlag() == false ) {
new ImageLoadTask(ListViewReadImageAscy.this,position,i).execute();
}
return i;
}
}
封装图片vo代码:
public class Bean {
private Bitmap image;
private boolean flag = false;;
public Bitmap getImage() {
return image;
}
public void setImage(Bitmap image) {
this.image = image;
}
public boolean getFlag(){
return flag;
}
public void setFlag(boolean flag){
this.flag = flag;
}
}