你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

与地图交互 (Android SDK)

本文介绍如何使用地图事件管理器。

注意

Azure Maps Android SDK 停用

适用于 Android 的 Azure Maps 本机 SDK 现已弃用,将于 2025 年 3 月 31 日停用。 为了避免服务中断,请在 2025 年 3 月 31 日之前迁移到 Azure Maps Web SDK。 有关详细信息,请参阅 Azure Maps Android SDK 迁移指南

与地图交互

地图通过其 events 属性管理所有事件。 下表列出了受支持的地图事件。

事件 事件处理程序格式 说明
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) 向地图添加 DataSourceVectorTileSource 时触发。
OnSourceRemoved (Source source) 从地图中删除 DataSourceVectorTileSource 时触发。
OnStyleChange () 加载或更改地图的样式时触发。

以下代码演示如何将 OnClickOnFeatureClickOnCameraMove 事件添加到地图。

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.
})

有关详细信息,请参阅导航地图文档,了解如何与地图交互和触发事件。

将功能事件范围划分为层

在将 OnFeatureClickOnLongFeatureClick 事件添加到地图时,可以将层实例或层 ID 作为第二个参数传入。 在传入层时,如果事件在该层上发生,则触发事件。 符号层、气泡层、直线层和多边形层均支持范围为层的事件。

//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
)

后续步骤

有关完整代码示例,请参阅以下文章: