Tap & Gesture Control
この章では地図に対するユーザーの操作を検出する方法を紹介します。
タップ操作
地図のタップや、地図上の特定のオブジェクトのタップを検知することができます。検知可能な操作と対応するリスナーは以下の通りです。
操作 | リスナー | リスナー追加関数 |
---|---|---|
地図の単押し | OnMapClickListener | Map.addOnMapClickListener |
地図の長押し | OnMapLongClickListener | Map.addOnMapLongClickListener |
地物の単押し | OnMapFeatureClickListener | Map.addOnMapFeatureClickListener |
地物の長押し | OnMapFeatureLongClickListener | Map.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本指でドラッグし地図をスクロールします。
ROTATE_GESTURE
2本指を回転し地図を回転します。
TILT_GESTURE
2本指を前後にスライドし地図の傾きを変えます。
QUICK_ZOOM_GESTURE
1本指でダブルタップしたままドラッグすることで地図を拡大、縮小します。
DOUBLE_TAP_GESTURE
1本指のダブルタップで地図を拡大し、2本指のダブルタッチで地図を縮小します。
ZOOM_GESTURE
2本指でピンチ操作し地図を拡大、縮小します。
Map.setMapGesture()
で各ジェスチャの設定の有効・無効を変更することが可能です。(デフォルト全て有効)
Map.setAllGesturesEnabled()
で全てのジェスチャの有効・無効を一括で変更することもできます。
ジェスチャーの検出
リスナーを設定することで地図に対するユーザーのジェスチャーを検出することができます。ジェスチャーとそのリスナーの対応は以下の通りです。
ジェスチャー | リスナー | リスナー追加関数 |
---|---|---|
SCROLL_GESTURE | OnMapMoveListener | Map.addOnMapMoveListener |
ROTATE_GESTURE | OnMapRotateListener | Map.addOnMapRotateListener |
TILT_GESTURE | - | - |
QUICK_ZOOM_GESTURE | OnMapScaleListener | Map.addOnMapScaleListener |
DOUBLE_TAP_GESTURE | OnMapScaleListener | Map.addOnMapScaleListener |
ZOOM_GESTURE | OnMapScaleListener | Map.addOnMapScaleListener |
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() {
// 移動の終了
}
});