次の方法で共有


マップを操作する (Android SDK)

この記事では、マップ イベント マネージャーを使用する方法について説明します。

Note

Azure Maps Android SDK の廃止

Android 用 Azure Maps Native SDK は非推奨となり、2025 年 3 月 31 日に廃止されます。 サービスの中断を回避するには、2025 年 3 月 31 日までに Azure Maps Web SDK に移行します。 詳細については、「Azure Maps Android SDK 移行ガイド」を参照してください。

マップの操作

マップでは、events プロパティを使用してすべてのイベントが管理されます。 次の表に、サポートされているマップ イベントを一覧表示します。

Event イベント ハンドラーの形式 [説明]
OnCameraIdle ()

マップが "アイドル" 状態になる前にレンダリングされた最後のフレームの後に発生します。

  • カメラの切り替えが進行中ではありません。
  • 現在要求されているすべてのタイルが読み込まれました。
  • すべてのフェード/切り替えアニメーションが完了しました。

OnCameraMove () ユーザーの操作またはメソッドの結果として、ビュー間でのアニメーション化された遷移中に繰り返し発生します。
OnCameraMoveCanceled () カメラに対する移動要求が取り消されたときに発生します。
OnCameraMoveStarted (int reason) ユーザーの操作またはメソッドの結果として、マップでビュー間の遷移が開始される直前に発生します。 イベント リスナーの reason 引数は、カメラの移動がどのように開始されたかに関する詳細を示す整数値を返します。 考えられる理由を次のリストに示します。
  • 1: ジェスチャ
  • 2: 開発者のアニメーション
  • 3: API アニメーション
OnClick (double lat, double lon): boolean マップがマップ上の同じ位置で押されて解放されたときに発生します。 このイベント ハンドラーにより、イベントを処理する必要があるか、または他のイベント リスナーに渡す必要があるかを示すブール値が返されます。
OnFeatureClick (List<Feature>): boolean マップがフィーチャー上の同じ位置で押されて解放されたときに発生します。 このイベント ハンドラーにより、イベントを処理する必要があるか、または他のイベント リスナーに渡す必要があるかを示すブール値が返されます。
OnLayerAdded (Layer layer) レイヤーがマップに追加されたときに発生します。
OnLayerRemoved (Layer layer) レイヤーがマップから削除されたときに発生します。
OnLoaded () 必要なリソースがすべてダウンロードされ、マップの最初の視覚的に完全なレンダリングが行われた直後に発生します。
OnLongClick (double lat, double lon): boolean マップがマップ上の同じ位置で押され、一瞬そのまま保持されてから、解放されたときに発生します。 このイベント ハンドラーにより、イベントを処理する必要があるか、または他のイベント リスナーに渡す必要があるかを示すブール値が返されます。
OnLongFeatureClick (List<Feature>): boolean マップがフィーチャー上の同じ位置で押され、一瞬そのまま保持されてから、解放されたときに発生します。 このイベント ハンドラーにより、イベントを処理する必要があるか、または他のイベント リスナーに渡す必要があるかを示すブール値が返されます。
 OnReady                (AzureMap map)       マップが最初に読み込まれるとき、向きが変わるとき、必要最小限のマップ リソースが読み込まれるとき、マップをプログラムで操作する準備が整ったときに発生します。 
OnSourceAdded (Source source) DataSource または VectorTileSource がマップに追加されたときに発生します。
OnSourceRemoved (Source source) DataSource または VectorTileSource がマップから削除されたときに発生します。
OnStyleChange () マップのスタイルが読み込まれたか、変更されたときに発生します。

次のコードは、OnClickOnFeatureClick、および OnCameraMove の各イベントをマップに追加する方法を示しています。

map.events.add((OnClick) (lat, lon) -> {
    //Map clicked.

    //Return true indicating if event should be consumed and not passed further to other listeners registered afterwards, false otherwise.
    return true;
});

map.events.add((OnFeatureClick) (features) -> {
    //Feature clicked.

    //Return true indicating if event should be consumed and not passed further to other listeners registered afterwards, false otherwise.
    return true;
});

map.events.add((OnCameraMove) () -> {
    //Map camera moved.
});
map.events.add(OnClick { lat: Double, lon: Double -> 
    //Map clicked.

    //Return true indicating if event should be consumed and not passed further to other listeners registered afterwards, false otherwise.
    return false
})

map.events.add(OnFeatureClick { features: List<Feature?>? -> 
    //Feature clicked.

    //Return true indicating if event should be consumed and not passed further to other listeners registered afterwards, false otherwise.
    return false
})

map.events.add(OnCameraMove {
    //Map camera moved.
})

詳細については、「マップ内を移動する」ドキュメントを参照して、マップおよびトリガー イベントの操作方法を確認してください。

フィーチャー イベントのスコープをレイヤーに設定する

OnFeatureClick または OnLongFeatureClick の各イベントがマップに追加されるとき、レイヤー インスタンスまたはレイヤー ID を 2 番目のパラメーターとして渡すことができます。 レイヤーが渡されるとき、イベントがそのレイヤーで発生するものである場合に、イベントが発生します。 レイヤーにスコープ設定されたイベントは、シンボル、バブル、線、および多角形の各レイヤーでサポートされています。

//Create a data source.
DataSource source = new DataSource();
map.sources.add(source);

//Add data to the data source.
source.add(Point.fromLngLat(0, 0));

//Create a layer and add it to the map.
BubbleLayer layer = new BubbleLayer(source);
map.layers.add(layer);

//Add a feature click event to the map and pass the layer ID to limit the event to the specified layer.
map.events.add((OnFeatureClick) (features) -> {
    //One or more features clicked.

    //Return true indicating if event should be consumed and not passed further to other listeners registered afterwards, false otherwise.
    return true;
}, layer);

//Add a long feature click event to the map and pass the layer ID to limit the event to the specified layer.
map.events.add((OnLongFeatureClick) (features) -> {
    //One or more features long clicked.

    //Return true indicating if event should be consumed and not passed further to other listeners registered afterwards, false otherwise.
    return true;
}, layer);
//Create a data source.
val source = DataSource()
map.sources.add(source)

//Add data to the data source.
source.add(Point.fromLngLat(0, 0))

//Create a layer and add it to the map.
val layer = BubbleLayer(source)
map.layers.add(layer)

//Add a feature click event to the map and pass the layer ID to limit the event to the specified layer.
map.events.add(
    OnFeatureClick { features: List<Feature?>? -> 
        //One or more features clicked.

        //Return true indicating if event should be consumed and not passed further to other listeners registered afterwards, false otherwise.
        return false
    },
    layer
)

//Add a long feature click event to the map and pass the layer ID to limit the event to the specified layer.
map.events.add(
    OnLongFeatureClick { features: List<Feature?>? -> 
         //One or more features long clicked.

        //Return true indicating if event should be consumed and not passed further to other listeners registered afterwards, false otherwise.
        return false
    },
    layer
)

次のステップ

完全なコードの例については、次の記事を参照してください。