Androidプログラマへの道 〜 Moonlight 明日香 〜 - 各マーカーに対応した処理をする

Google Maps Android API v2

Googleマップ上に複数のマーカーを表示し, タッチされたマーカーに応じた処理を行うには, マーカー(Marker)クラスを利用する.

マーカーの識別

マーカータッチイベントを取得する」を参照し, Googleマップ上のマーカーのタッチイベントが取得できるようにする.
  • MainActivity.java
    • onMarkerClickメソッド内で, Marker#getIdメソッドで, マーカーのIDを取得する.
    • String#equalsメソッドでマーカーを識別し, それぞれのマーカーに応じた処理を行う.
package com.moonlight_aska.android.googlemapv2;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMarkerClickListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.Toast;

public class MainActivity extends FragmentActivity {
  // 関西国際空港 : 34.435912,135.24349641
  private LatLng mKansai = new LatLng(34.435912, 135.243496);
  // 伊丹空港 : 34.785500 ,135.438004
  private LatLng mItami = new LatLng(34.785500, 135.438004);
  // 神戸空港 : 34.636245, 135.224061
  private LatLng mKobe = new LatLng(34.636245, 135.224061);
  private GoogleMap mMap = null;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mMap = ( (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map) ).getMap();
    if (mMap != null) {
      // 関西国際空港へ移動
      CameraPosition cameraPos = new CameraPosition.Builder()
        .target(mKansai).zoom(10).build();
      mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPos));
      // マーカー表示
      MarkerOptions options = new MarkerOptions();
      options.position(mKansai);
      options.title("関西国際空港");
      options.draggable(true);
      mMap.addMarker(options);
      options.position(mItami);
      options.title("伊丹空港");
      mMap.addMarker(options);
      options.position(mKobe);
      options.title("神戸空港");
      mMap.addMarker(options);
      // マーカークリック時のイベントハンドラ登録
      mMap.setOnMarkerClickListener(new OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
          // TODO Auto-generated method stub
          String id = marker.getId();
          String msg = "その他(" + id + ")";
          if (id.equals("m0")) {
            msg = "関西国際空港(" + id + ")";
          }
          else if (id.equals("m1")) {
            msg = "伊丹空港(" + id + ")";
          }
          else if (id.equals("m2")) {
            msg = "神戸空港(" + id + ")";
          }
          Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
          return false;
        }
      });
    }
  }
}
  • 動作例
Nexus7 / Android 4.3