浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【androidjava】URLに含まれた画像をBitmap→Drawableの順で変換する

osmdroidのマーカーでネットから拾ってきたURLに含まれた画像を表示するにはひと工夫必要になります。

urlを使うならpicassoでいけると思ったのですが、あちらが対象にするのはImageViewなので、

markerはMarkerクラスですのでpicassoの引数に含めることができません。

marker.setIcon()の引数もDrawable。しかたがないのでバックグラウンド内でURL→Bitmap→Drawableの

順でせっせこ変換していく方法に落ち着きました。

まず、AsyncTaskをextendsしてコンストラクタをマーカーに決定。

使うオブジェクトはこのマーカーだけ。

バックグラウンド内ではHttpURLConnectionを使ってURLから

Bitmapを作成しています。この処理は、メインスレッドで行うと例外

を喰らうので必ずdoInBackground内で処理をすることがポイント。

メインスレッドに戻ったら今度はDrawableに変換しています。

この処理で戻ってきたDrawableをsetIconすることでURLだった画像を

晴れてマーカーに追加することができました!意外と処理が少なかった・・・?

書いていると長く感じたが気のせいでした。

以下が全コードです。参考にしてみてください。

</pre>
public class GetImageAsyncTask extends AsyncTask<String,Void, Bitmap> {
private Marker mMarker;
public GetImageAsyncTask(Marker marker) {
mMarker = marker;
}
@Override
protected Bitmap doInBackground(String... strings) {
Bitmap myBitmap = getBitmapFromURL(strings[0]);
return myBitmap;
}

@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
Drawable draw = convert(bitmap);
mMarker.setIcon(draw);
}
public static Bitmap getBitmapFromURL(String src) {
try {
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (IOException e) {
// Log exception
return null;
}
}
public static BitmapDrawable convert(Bitmap bitmap)
{
return new BitmapDrawable(bitmap);
}
}
<pre>

 

  • この記事いいね! (1)