Tap & Gesture Control

この章では地図に対するユーザーの操作を検出する方法を紹介します。

タップ操作

地図のタップや、地図上の特定のオブジェクトのタップを検知することができます。検知可能な操作と対応するリスナーは以下の通りです。

操作リスナーリスナー追加関数
地図の単押しOnMapClickListenerMap.addOnMapClickListener
地図の長押しOnMapLongClickListenerMap.addOnMapLongClickListener
地物の単押しOnMapFeatureClickListenerMap.addOnMapFeatureClickListener
地物の長押しOnMapFeatureLongClickListenerMap.addOnMapFeatureLongClickListener

地図の操作検知

地図の操作検知のサンプルコードは以下の通りです。

map.addOnMapClickListener(new OnMapClickListener() {
    @Override
    public boolean onMapClick(GeoCoordinate point) {
        // pointにクリックした場所の緯度経度が格納されています
        return false;
    }
});

地物の操作検知

地物は地図上のコンビニアイコンや地名などのオブジェクトです。

地物

地物の操作検知例は以下の通りです。地物の情報はMapFeatureとして格納され、複数のキーと値のペアとして取り出すことができます。

map.addOnMapFeatureClickListener(new OnMapFeatureClickListener() {
    @Override
    public void onClick(@NonNull GeoCoordinate point, @NonNull List<MapFeature> features) {
        String name = features.get(0).getValue("name"); // "name"キーの値を取得
    }
});

キーはMapFeature.getKeys()で一覧を取得することができます。

ジェスチャー

SDKでは地図に対するいくつかの複雑な動作(ジェスチャー)をサポートしています。サポートされている地図に対するユーザーのジェスチャーの種類は以下の通りです。

SCROLL_GESTURE

1本指でドラッグし地図をスクロールします。

scroll

ROTATE_GESTURE

2本指を回転し地図を回転します。

rotate

TILT_GESTURE

2本指を前後にスライドし地図の傾きを変えます。

tile

QUICK_ZOOM_GESTURE

1本指でダブルタップしたままドラッグすることで地図を拡大、縮小します。

quick_zoom

DOUBLE_TAP_GESTURE

1本指のダブルタップで地図を拡大し、2本指のダブルタッチで地図を縮小します。

double_tap

two_tap

ZOOM_GESTURE

2本指でピンチ操作し地図を拡大、縮小します。

zoom

Map.setMapGesture()で各ジェスチャの設定の有効・無効を変更することが可能です。(デフォルト全て有効)

Map.setAllGesturesEnabled()で全てのジェスチャの有効・無効を一括で変更することもできます。

ジェスチャーの検出

リスナーを設定することで地図に対するユーザーのジェスチャーを検出することができます。ジェスチャーとそのリスナーの対応は以下の通りです。

ジェスチャーリスナーリスナー追加関数
SCROLL_GESTUREOnMapMoveListenerMap.addOnMapMoveListener
ROTATE_GESTUREOnMapRotateListenerMap.addOnMapRotateListener
TILT_GESTURE--
QUICK_ZOOM_GESTUREOnMapScaleListenerMap.addOnMapScaleListener
DOUBLE_TAP_GESTUREOnMapScaleListenerMap.addOnMapScaleListener
ZOOM_GESTUREOnMapScaleListenerMap.addOnMapScaleListener
Note:

QUICK_ZOOM_GESTURE, DOUBLE_TAP_GESTURE, ZOOM_GESTUREは全てOnMapScaleListenerで通知されます。

各リスナーではジャスチャーの開始、ジェスチャー中、終了がそれぞれ通知されます。例えばOnMapMoveListenerでぞれぞれの通知を受け取るためのサンプルコードは以下の通りです。

map.addOnMapMoveListener(new OnMapMoveListener() {
    @Override
    public void onMoveBegin() {
        // 移動の開始
    }

    @Override
    public void onMove() {
        // 移動中
    }

    @Override
    public void onMoveEnd() {
        // 移動の終了
    }
});