1. ホーム
  2. android

[解決済み] Android map API v2 でカスタム形状のビットマップマーカーを作成する方法 [重複]について

2022-04-15 15:27:28

質問

Google Map API v2を使用したAndroidアプリケーションを開発しています。 カスタムマーカーを使用してユーザーの位置を地図上に表示する必要があります。

各マーカーには、URLから取得したユーザーの写真が表示されます。画像は、サーバーから非同期モードでダウンロードされる必要があります。例として、添付のスクリーンショットをご覧ください。

マーカーに画像やカスタム情報を追加するにはどうすればよいですか?

解決方法は?

Google Maps API v2 デモ があり、そこに MarkerDemoActivity クラスで、カスタム画像が GoogleMap に設定される様子を見ることができます。

// Uses a custom icon.
mSydney = mMap.addMarker(new MarkerOptions()
    .position(SYDNEY)
    .title("Sydney")
    .snippet("Population: 4,627,300")
    .icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)));

これはマーカーを画像に置き換えるだけなので、マーカーを画像に置き換えるために Canvas は、より複雑でファンシーなものを描画します。

Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap bmp = Bitmap.createBitmap(80, 80, conf);
Canvas canvas1 = new Canvas(bmp);

// paint defines the text color, stroke width and size
Paint color = new Paint();
color.setTextSize(35);
color.setColor(Color.BLACK);

// modify canvas
canvas1.drawBitmap(BitmapFactory.decodeResource(getResources(),
    R.drawable.user_picture_image), 0,0, color);
canvas1.drawText("User Name!", 30, 40, color);

// add marker to Map
mMap.addMarker(new MarkerOptions()
    .position(USER_POSITION)
    .icon(BitmapDescriptorFactory.fromBitmap(bmp))
    // Specifies the anchor to be at a particular point in the marker image.
    .anchor(0.5f, 1));

これはキャンバスを描画します canvas1 の上に GoogleMap mMap . このコードは(ほとんど)自明であり、多くのチュートリアルがあります。 Canvas . を見ることから始めるとよいでしょう。 キャンバスとドローアブル をAndroid Developerページよりご覧ください。

今度は、URLから画像をダウンロードすることもできます。

URL url = new URL(user_image_url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();   
conn.setDoInput(true);   
conn.connect();     
InputStream is = conn.getInputStream();
bmImg = BitmapFactory.decodeStream(is); 

あなた しなければならない 背景スレッドから画像をダウンロードする。 AsyncTask または ボレー または RxJava の場合)。

この後 BitmapFactory.decodeResource(getResources(), R.drawable.user_picture_image) をダウンロードした画像に置き換えます。 bmImg .