カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

GoogleMap Android API v2 使い方#05

この記事は最終更新日から1年以上経過しています。

今回はマーカーをタップした時の処理をカスタマイズしてみましょう。
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;

    }

});
この記事がお役に立ちましたらシェアお願いします
2,295 views

コメントは受け付けていません。