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