画像のURLを指定して、ダウンロードしてImageViewに表示する必要があります。
画像が非常に大きく、OutOfMemoryExceptionがスローされる状況を除いて、すべてが正常に機能します。
うまくいけば、Androidのドキュメントがこの問題の解決策を提供します:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
私は、リソースではなく、InputStreamを受け入れるようにその切り取られたコードを適応させようとしました。
ただし、画像が表示されていないため、例外なく、そこに何かが欠けているようですが、LogCatに次のように表示されます:SkImageDecoder::Factoryがnullを返しました
画像をデコードして縮小する方法は次のとおりです(Androidのドキュメントに基づく)。
public static Bitmap decodeBitmapFromInputStream(InputStream inputStream,
int reqWidth, int reqHeight) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(inputStream, null, options);
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
options.inJustDecodeBounds = false;
return BitmapFactory.decodeStream(inputStream, null, options);
}
public static int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
if (width > height) {
inSampleSize = Math.round((float) height / (float) reqHeight);
} else {
inSampleSize = Math.round((float) width / (float) reqWidth);
}
}
return inSampleSize;
}
さて、私のビットマップダウンローダーメソッドでは、次のように呼び出します。
inputStream=entity.getContent();
return decodeBitmapFromInputStream(inputStream, 320, 480);
念のため、完全な方法を次に示します。
static Bitmap downloadBitmap(String url){
AndroidHttpClient client=AndroidHttpClient.newInstance("Android");
HttpGet getRequest=new HttpGet(url);
try{
HttpResponse response=client.execute(getRequest);
int statusCode=response.getStatusLine().getStatusCode();
if(statusCode!=HttpStatus.SC_OK){
Log.d("GREC", "Error "+statusCode+" while retrieving bitmap from "+url);
return null;
}
HttpEntity entity=response.getEntity();
if(entity!=null){
InputStream inputStream=null;
try{
inputStream=entity.getContent();
return decodeBitmapFromInputStream(inputStream, 320, 480);
}catch (Exception e) {
Log.d("GREC", "Exception occured in BitmapDownloader");
e.printStackTrace();
}
finally{
if(inputStream!=null){
inputStream.close();
}
entity.consumeContent();
}
}
}catch (Exception e) {
getRequest.abort();
Log.d("GREC", "Error while retriving bitmap from "+url+", "+e.toString());
}finally{
if(client!=null){
client.close();
}
}
return null;
}