我有一个自定义列表视图,每行都有一个从服务器下载图像的imageview。 我正在使用cursoradapter,这是下载图像的代码:
private class downloadimage extends AsyncTask<String, String, Bitmap> {
private Bitmap pic;
private final WeakReference<ImageView> viewReference;
public downloadimage(ImageView view) {
viewReference = new WeakReference<ImageView>(view);
}
protected Bitmap doInBackground(String... param) {
try {
URL url = new URL(param[0]);
URLConnection conn = url.openConnection();
pic = BitmapFactory.decodeStream(conn.getInputStream());
if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
try {
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File(sdCard.getAbsolutePath()+ "/thumb");
dir.mkdirs();
File file = new File(dir, param[1]);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
pic.compress(Bitmap.CompressFormat.JPEG, 100, bao);
FileOutputStream f = null;
f = new FileOutputStream(file);
if (f != null) {
f.write(bao.toByteArray());
f.flush();
f.close();
}
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
} catch (Exception ex) {
return null;
}
return pic;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (isCancelled()) {
bitmap = null;
}
ImageView imageView = viewReference.get();
if(bitmap!=null){
if (imageView != null) imageView.setImageBitmap(bitmap);
}
}
}
它有效,问题是这样,如果我滚动listview很多,它开始下载每个项目图像,它可能需要很长时间下载当前行图像,同时它可能会更改行imageview 2-3次。 我想在滚动时停止下载,当scrollview停止时,它会下载屏幕上的所有图像。
我该怎么做?我不想使用像“Android-Universal-Image-Loader”这样的库,因为我下载了所有图像并且每个图像都有一个特定的地址,我的意思是,我可能在sd卡上有几个子目录用于1张图像。< / p> 你可以帮帮我吗? 谢谢