edo1z blog

プログラミングなどに関するブログです

Android - Google Static Maps APIで地図画像を取得して表示する

最初にgoogle static map apiを有効にし、APIキーを取得・設定する必要がある。 https://console.developers.google.com

下記のように表示したい地図情報をパラメタに含めたURLを作成し、地図画像を取得する。 下記コードのmContextは、コンストラクタで、引数で取得したContextを入れたprivate変数。

//地図画像を表示させるviewを取得
ImageView mapView = (ImageView) view.findViewById(R.id.img_map);

//地図画像情報の作成
String lat = "35.039352";
String lng = "135.729265";

String url =
        "http://maps.google.com/maps/api/staticmap?center=" +
        lat + "," + lng + "&zoom=13&size=180x120&markers=" +
        lat + "%2C" + lng + "&sensor=false&key=" + mContext.getString(R.string.google_maps_key);

//地図画像の取得・表示
new DownloadImageTask(mapView).execute(url);

DownloadImageTaskクラスは、下記。 (参考:http://stackoverflow.com/questions/5776851/load-image-from-url) 下記コードの、getCroppedBitmapは、Bitmap画像を角丸にする関数。

/**
 * URLから画像をダウンロードする
 */
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
            mIcon11 = getCroppedBitmap(mIcon11);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}

getCroppedBitmap関数は、下記。 (参考:ImageView を 簡単に 角丸 にする

/**
 * 画像を角丸にする
 * @param bitmap
 * @return
 */
public Bitmap getCroppedBitmap(Bitmap bitmap) {
    int width  = bitmap.getWidth();
    int height = bitmap.getHeight();

    final Rect rect   = new Rect(0, 0, width, height);
    final RectF rectf = new RectF(0, 0, width, height);

    Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    final Paint paint = new Paint();
    paint.setAntiAlias(true);

    canvas.drawRoundRect(rectf, width / 10, height / 10, paint);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);
    return output;
}