- Android
- 2014-09-16
今回はマーカーをタップした時の処理をカスタマイズしてみましょう。
GoogleMapのオブジェクト(mMap)は作成済とします。
マーカータップ時の処理カスタマイズ
まずはマーカーを追加します。
詳細なマーカーの追加方法についてはGoogleMap Android API v2 使い方#02を参照ください。
marker = mMap.addMarker(new MarkerOptions() .position(new LatLng(34.7, 135.5)) .snippet("スニペット"));
マーカーのイベントをカスタマイズし、マーカーのIDとスニペットをトーストに表示してみましょう。
mMap.setOnMarkerClickListener(new OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { Toast.makeText(getApplicationContext(), marker.getId() + "\r\n" + marker.getSnippet(), Toast.LENGTH_LONG).show(); return false; } });
getIdメソッドはm0、m1…とマーカーのIDが返されます。
getSnippetメソッドは、マーカー作成時に設定したSnippetが返されます。
この機能を実装するとInfoWindowは表示されなくなります。
onMarkerClickの戻り値がfalse(デフォルト)の場合は、マーカーをタップした際、
その地点を中心とするように地図が移動します。
移動させたくない場合は戻り値にtrueを設定してください。
データのカスタマイズ
次は、マーカーに設定する情報をカスタマイズしてみましょう。
デフォルトでは設定できる要素が決まっています。
独自に様々な値を持たせる方法をご紹介します。
まずは、入れ物となる要素を持ったクラスを作成します。
class CustomData { private String strdata_; private int intdata_; public void setStrData(String strdata) { strdata_ = strdata; } public String getStrData() { return strdata_; } public void setIntdata(int intdata) { intdata_ = intdata; } public int getIntdata() { return intdata_; } }
上記で作成したクラスとHashMapを使用します。
HashMapの値のほうを先程のクラスとして定義します。
private CustomData item; private HashMap<String, CustomData> myList = new HashMap<String, CustomData>();
マーカーを追加しましょう。
この時、追加したマーカーのIDをすぐに使用するため、addMarkerの返り値のMarkerを取得しておきます。
Marker marker = mMap.addMarker(new MarkerOptions() .position(new LatLng(34.7, 135.5)));
CustomDataのオブジェクトを作成します。
item = new CustomData(); item.setStrData("文字データ"); item.setIntData(1);
マーカーIDをキーとし、作成したオブジェクトをHashMapに追加します。
myList.put(marker.getId(), item);
最後に、マーカーのタップ時にマーカーIDをキーにHashMapからデータを取得し、トーストに表示します。
mMap.setOnMarkerClickListener(new OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { Toast.makeText(getApplicationContext(), myList.get(marker.getId()).getStrData(), Toast.LENGTH_LONG).show(); return true; } });