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

GoogleMap Android API v2 使い方#05

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

今回はマーカーをタップした時の処理をカスタマイズしてみましょう。
GoogleMapのオブジェクト(mMap)は作成済とします。

マーカータップ時の処理カスタマイズ

まずはマーカーを追加します。
詳細なマーカーの追加方法についてはGoogleMap Android API v2 使い方#02を参照ください。

1marker = mMap.addMarker(new MarkerOptions()
2    .position(new LatLng(34.7, 135.5))
3    .snippet("スニペット"));

マーカーのイベントをカスタマイズし、マーカーのIDとスニペットをトーストに表示してみましょう。

1mMap.setOnMarkerClickListener(new OnMarkerClickListener() {
2 
3    @Override
4    public boolean onMarkerClick(Marker marker) {
5 
6        Toast.makeText(getApplicationContext(),
7            marker.getId() + "\r\n" + marker.getSnippet(),
8            Toast.LENGTH_LONG).show();
9 
10        return false;
11 
12    }
13 
14});

getIdメソッドはm0、m1…とマーカーのIDが返されます。
getSnippetメソッドは、マーカー作成時に設定したSnippetが返されます。

この機能を実装するとInfoWindowは表示されなくなります。

onMarkerClickの戻り値がfalse(デフォルト)の場合は、マーカーをタップした際、
その地点を中心とするように地図が移動します。
移動させたくない場合は戻り値にtrueを設定してください。

データのカスタマイズ

次は、マーカーに設定する情報をカスタマイズしてみましょう。
デフォルトでは設定できる要素が決まっています。
独自に様々な値を持たせる方法をご紹介します。

まずは、入れ物となる要素を持ったクラスを作成します。

1class CustomData {
2 
3    private String strdata_;
4    private int intdata_;
5 
6    public void setStrData(String strdata) {
7        strdata_ = strdata;
8    }
9    public String getStrData() {
10        return strdata_;
11    }
12 
13    public void setIntdata(int intdata) {
14        intdata_ = intdata;
15    }
16    public int getIntdata() {
17        return intdata_;
18    }
19 
20}

上記で作成したクラスとHashMapを使用します。
HashMapの値のほうを先程のクラスとして定義します。

1private CustomData item;
2private HashMap<String, CustomData> myList = new HashMap<String, CustomData>();

マーカーを追加しましょう。
この時、追加したマーカーのIDをすぐに使用するため、addMarkerの返り値のMarkerを取得しておきます。

1Marker marker = mMap.addMarker(new MarkerOptions()
2    .position(new LatLng(34.7, 135.5)));

CustomDataのオブジェクトを作成します。

1item = new CustomData();
2item.setStrData("文字データ");
3item.setIntData(1);

マーカーIDをキーとし、作成したオブジェクトをHashMapに追加します。

最後に、マーカーのタップ時にマーカーIDをキーにHashMapからデータを取得し、トーストに表示します。

1mMap.setOnMarkerClickListener(new OnMarkerClickListener() {
2 
3    @Override
4    public boolean onMarkerClick(Marker marker) {
5 
6        Toast.makeText(getApplicationContext(),
7            myList.get(marker.getId()).getStrData(),
8            Toast.LENGTH_LONG).show();
9 
10        return true;
11 
12    }
13 
14});
この記事がお役に立ちましたらシェアお願いします
2,343 views

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