Я хочу написать приложение, которое отображает изображения с веб-сервера Cherokee. Я загружаю изображения со следующим кодом:
@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;
}
}
Это работает, но поскольку изображения, которые мне нужно загрузить, довольно большие (несколько мегабайт), требуется некоторое время, прежде чем пользователь сможет что-либо увидеть.
Я хочу показать предварительный просмотр изображения с низким разрешением при загрузке полного изображения (как это делает любой веб-браузер). Как я могу это сделать? BitmapFactory, кажется, принимает только полностью загруженные файлы или потоки, которые также полностью загружаются перед декодированием.
На Сервере только изображения высокого разрешения. Я просто хочу показать все изображение, которое я уже загрузил во время загрузки, чтобы показать (части) изображение до того, как оно будет полностью загружено. Таким образом, пользователь может прервать загрузку, как только увидит, что это не та картинка, которую он искал.