如何在Android上下载时显示图像预览?

时间:2013-02-23 15:43:31

标签: android image preview downloading bitmapfactory

我想编写一个显示切诺基网络服务器图像的应用程序。我使用以下代码下载图像:

@Override
protected Bitmap doInBackground(URL... params) { 
    URL urlToDownload = params[0];
    String downloadFileName = urlToDownload.getFile();
    downloadFile = new File(applicationContext.getCacheDir(), downloadFileName);
    new File(downloadFile.getParent()).mkdirs(); // create all necessary folders

    // download the file if it is not already cached
    if (!downloadFile.exists()) {
        try {
            URLConnection cn = urlToDownload.openConnection();   
            cn.connect();
            cn.setReadTimeout(5000);
            cn.setConnectTimeout(5000);
            InputStream stream = cn.getInputStream();

            FileOutputStream out = new FileOutputStream(downloadFile);   
            byte buf[] = new byte[16384];
            int numread = 0;
            do {
                numread = stream.read(buf);   
                if (numread <= 0) break;   
                out.write(buf, 0, numread);
            } while (numread > 0);
            out.close();
        } catch (FileNotFoundException e) {
            MLog.e(e);
        } catch (IOException e) {
            MLog.e(e);
        } catch (Exception e) {
            MLog.e(e);
        }
    }

    if (downloadFile.exists()) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 16;
        return BitmapFactory.decodeFile(downloadFile.getAbsolutePath(), options);   
    } else {
        return null;
    }
}

这样可行,但由于我需要下载的图像非常大(多兆字节),因此用户可以看到任何内容需要一些时间。

我希望在加载完整图像时显示图像的低分辨率预览(就像任何Webbrowser一样)。我怎样才能做到这一点? BitmapFactory似乎只接受完全加载的文件或流,这些文件或流也在解码前完全下载。

服务器上只有高分辨率图像。我只是想在下载时显示我已下载的图像的所有内容,以便在完全下载之前显示(部分)图片。这样,一旦用户看到这不是他正在寻找的图片,就可以中止下载。

2 个答案:

答案 0 :(得分:0)

最简单的方法是下载两张图片。一个很小(比如几个字节),然后在背景中加载较大的图像时将其放大(看起来很糟糕但会给出进度的概念)。小的一个人很可能会先返回,你可以让它看起来像是从低分辨率到高分辨率。

答案 1 :(得分:0)

2 AsyncTask怎么样? 第一个下载小分辨率或低分辨率图像并在ImageView上显示它之后,第一个AsyncTask调用第二个下载全分辨率图像的AsyncTask。