我想寫一個應用程序,顯示來自切諾基網絡服務器的圖像。我用下面的代碼下載圖像:如何在Android上下載圖片時顯示圖片預覽?
@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似乎只接受完全加載的文件或在解碼之前完全下載的流。
服務器上只有高分辨率圖像。我只想顯示下載時已下載的圖像的所有內容,以便在圖像完全下載之前顯示(部分)圖像。這樣用戶可以在他看到這不是他正在尋找的圖片時立即終止下載。
不幸的是,我無法對服務器進行任何更改。 – hin 2013-02-23 16:47:39
Android不支持漸進式jpeg,但不確定是否可以讓解碼器解碼部分。最有可能的方法是將原始圖像保存到文件中,然後嘗試執行並異步讀取。這樣,如果它是一個漸進的JPEG,你*可能會得到一個部分解碼。但是,由於您無法更改服務器組件,因此無論您正在抓取哪個網站,都無法投放漸進式jpeg。可能更好地顯示填充的進度指示器 – 2013-02-28 00:06:58