如何在使用AsyncTask下载图像时显示默认图像?

时间:2012-09-12 10:43:40

标签: android listview android-asynctask

我正在使用AsyncTask从远程服务器下载图像并在ListView中显示它们。我正在使用 this blog 来完成它,一切正常。

此博客中唯一的问题是在下载图像时正在显示ColorDrawable。但我想在下载图像时显示默认图像。就像下图所示:

image list

在这里你可以看到:

  1. 已经下载了Taylor Loother和Oye Oye的图片。
  2. 服务器上没有Gopala Govinda的图片,所以我不是 从服务器下载图像并显示默认图像。
  3. 对于Hellboy来说,图像仍在下载,因此是一种颜色 背景(细黑线)出现在他的名字上。的我 不想显示这条黑线。我想显示默认值 图像就像在Gopala Govinda面前一样,直到图像没有 从服务器上加载Hellboy。

    有没有人知道该怎么做?

4 个答案:

答案 0 :(得分:1)

我使用以下开源库来管理AsyncTasks中的图像提取: UrlImageViewHelper on GitHub

它可以在您下载实际图像时显示“加载”图像。

您可以使用此库或自行完成此类操作。

如果您是自己动手,当您最初给ImageView充气时,请使用“加载”图片。然后在AsyncTask中,一旦下载了图像,就可以通过覆盖onPostExecute的{​​{1}}方法来修改此视图(此方法在UI线程上运行,因此您可以修改我们的视图在这种方法中)

答案 1 :(得分:1)

我认为你想要做的是让DownloadedDrawable类扩展BitmapDrawable而不是Drawable,然后选择一个合适的超级构造函数来指定你的默认图像位图: / p>

/**
 * A fake Drawable that will be attached to the imageView while the download is in progress.
 *
 * Contains a reference to the actual download task, so that a download task can be stopped
 * if a new binding is required, and makes sure that only the last started download process can
 * bind its result, independently of the download finish order.</p>
 */
private static class DownloadedDrawable extends BitmapDrawable {
    private final WeakReference<BitmapDownloaderTask> 
       bitmapDownloaderTaskReference;

    private DownloadedDrawable(BitmapDownloaderTask bitmapDownloaderTask,
       Resources resources, Bitmap bitmap) {
        super(resources, bitmap); // you'll have to provide these
        bitmapDownloaderTaskReference =
            new WeakReference<BitmapDownloaderTask>(bitmapDownloaderTask);
    }

    public BitmapDownloaderTask getBitmapDownloaderTask() {
        return bitmapDownloaderTaskReference.get();
    }
}

答案 2 :(得分:0)

或者您也可以使用此处https://github.com/kaeppler/ignition/wiki/Sample-applications

中的RemoteImageView

答案 3 :(得分:0)

ListAdapter的{​​{1}}活动中,只需将默认图片放入ListView即可。

例如,在ListAdapter Activity的getView中,您可以这样做:

ImageView