精简模式

Maps SDK for Android 可以提供地图的位图图像,从而为用户提供一定程度的互动。这称为精简模式地图。

代码示例

GitHub 上的 ApiDemos 代码库包含相关示例,展示了如何使用精简模式:

精简模式概览

精简模式地图是指位于指定位置和缩放级别的地图的位图图像。精简模式支持所有地图类型(标准、混合、卫星、地形)以及完整 API 提供的一部分功能。如果您想以串流形式提供多个地图,或者想要提供的地图因过小而无法支持有意义的互动,便可使用精简模式。

查看该地图的用户无法缩放或平移地图。用户可以通过地图上的图标在 Google 地图移动应用中查看地图并请求路线。

添加精简模式地图

精简模式使用与完整 Google Maps Android API 相同的类和接口。您可以通过以下方式将 GoogleMap 设置为精简模式:

  • 作为 MapViewMapFragment 的 XML 属性
  • 或在 GoogleMapOptions 对象中

作为 MapViewMapFragment 的 XML 属性

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:name="com.google.android.gms.maps.MapFragment"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    map:cameraZoom="13"
    map:mapType="normal"
    map:liteMode="true"/>

GoogleMapOptions 对象中

Java


GoogleMapOptions options = new GoogleMapOptions()
    .liteMode(true);

      

Kotlin


val options = GoogleMapOptions()
    .liteMode(true)

      

如需详细了解如何设置地图的初始状态,请参阅有关地图对象的指南。

用于启动地图视图或路线请求的 Intent

默认情况下,您可以通过地图右下角工具栏中的图标访问 Google 地图移动应用中的地图视图或路线请求。通过调用 UiSettings.setMapToolbarEnabled(false) 来停用该工具栏。如需了解详情,请参阅工具栏文档

同样,在默认情况下,当用户点按地图时,API 也会启动 Google 地图移动应用。您可以通过使用 GoogleMap.setOnMapClickListener() 设置自己的监听器来替换此默认设置。您还可以通过对包含 MapViewMapFragment 的视图调用 setClickable() 在地图上停用点击事件。如需详细了解这两种方法,请参阅事件文档

生命周期事件

完全互动模式下使用 API 时,使用 MapView 类的用户必须将所有 activity 生命周期方法都转发给 MapView 类中的相应方法。生命周期方法示例包括 onCreate()onDestroy()onResume()onPause()

精简模式下使用 MapView 类时,转发生命周期事件为可选操作,但下列情况除外:

  • 必须调用 onCreate(),否则将不会显示任何地图。
  • 如果您想在精简模式地图上显示“我的位置”圆点并使用默认位置来源,则需要调用 onResume()onPause(),因为位置来源只会在这些调用的间隔期进行更新。如果您使用的是自己的位置来源,则无需调用这两种方法。

支持的 API 功能

下表介绍了每个 API 功能领域的精简模式地图行为。如果应用调用了精简模式不支持的方法,API 将会记录一则警告消息。

功能
地图类型
是否支持?
以下地图类型可通过 GoogleMapOptions.mapType()GoogleMap.setMapType() 提供:MAP_TYPE_NORMALMAP_TYPE_SATELLITEMAP_TYPE_TERRAINMAP_TYPE_HYBRIDMAP_TYPE_NONE
多段线、多边形、圆形
是否支持?
形状的精简模式功能与完整 API 一致。
投影
是否支持?
投影的精简模式功能与完整 API 一致。
我的位置
是否支持?
“我的位置”图层的精简模式功能与完整 API 一致。
地图内边距
是否支持?
地图内边距的精简模式支持与完整 API 一致。
信息窗口
是否支持?
如果您设置了某个标记的 title(),当用户点按该标记时,系统会显示默认的信息窗口。您可以通过对标记调用 showInfoWindow() 以编程方式显示信息窗口。您还可以通过 InfoWindowAdapter 接口创建自定义信息窗口。
自定义基本地图样式
是否支持?部分支持
Maps SDK for Android 支持基本地图的自定义样式。精简模式仅支持基于 JSON 的自定义样式设置,不支持云端样式设置,云端样式设置需要使用地图 ID 渲染自定样式的地图。
标记
是否支持?部分支持
您可以添加一个标记并响应点击事件,还可以添加自定义标记图标。但无法做到使标记可拖动。精简模式地图上的标记是平面标记,无法旋转。
相机位置、缩放和动画
是否支持?部分支持

您可以设置相机目标和缩放,但无法设置倾斜角度或方位。在精简模式下,缩放级别四舍五入为最接近的整数。调用 GoogleMap.moveCamera() 将再获得一幅精简模式地图图像。如需详细了解如何设置和操纵相机,请参阅更改视图

调用 GoogleMap.animateCamera() 将不会以动画形式呈现相机移动,相机视图将即时移至新位置。

地图事件
是否支持?部分支持

精简模式支持 GoogleMap.setOnMapClickListener()GoogleMap.setOnMapLongClickListener()

如需在精简模式下停用地图上的点击事件,您可以对包含 MapViewMapFragment 的视图调用 setClickable()。例如,在列表视图下显示地图时,如果您想让点击事件调用与地图无关的操作,便可执行以上调用。

如需了解详情,请参阅事件文档

室内地图和建筑物
是否支持?
精简模式将显示与 Maps Static API 相同的图块。这意味着,如果默认图块中内置有室内楼层平面图,它就会显示出来。否则,将不会显示。此外,您也无法更改显示的层级或操纵层级选择器。
路况图层
是否支持?
精简模式不支持 GoogleMap.setTrafficEnabled()
地面叠加层
是否支持?
精简模式不支持 GoogleMap.addGroundOverlay()
图块叠加层
是否支持?
精简模式不支持 GoogleMap.addTileOverlay()
手势
是否支持?
精简模式不支持手势。启用和停用手势将不会有任何影响。
街景
是否支持?
精简模式不支持街景