GoogleMap Android API v2 使い方#05
- 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;
}
});




