Android 界面自定义

ConsumerMapStyle 类包含 setter 和 getter 方法,可为您动态自定义标记和多段线。此类使用 ConsumerController.getConsumerMapStyle() 方法异步公开。

界面自定义在设备旋转后将一直有效,直到 ConsumerController 分离为止。

自定义标记

用于设置标记类型及其属性的方法为ConsumerMapStyle.setMarkerStyleOptions()。您的自定义标记选项会覆盖 Consumer SDK 提供的默认值。要恢复默认值,请对 MarkerOptions 参数使用 null 调用 setMarkerStyleOptions()。使用 getMarkerStyleOptions() 检索活跃的 MarkerOptions

标记类型

以下标记可用于自定义:

  • TRIP_PICKUP_POINT
  • TRIP_DROPOFF_POINT
  • TRIP_INTERMEDIATE_DESTINATION
  • TRIP_VEHICLE

行程监控期间会显示“TRIP_PICKUP_POINT”和“TRIP_DROPOFF_POINT”。

TRIP_VEHICLE会在行程监控期间显示。标记图标不会根据行程的实际车辆类型而变化。Consumer SDK 会在行程监控期间更新 TRIP_VEHICLE 图标的旋转,以模拟实际车辆行驶路线时的行为。

标记选项

每个标记可用的可自定义的属性是 Google 地图 MarkerOptions 提供的一组属性。

MarkerOptions 是使用其构造函数构建的,而自定义属性则使用“Setter”样式方法指定。系统为每个属性提供了默认值,因此您只需指定自定义值即可。

您可以通过将 visible 设置为 false 来关闭标记。您应提供足够的数据,以便您使用自己的界面元素来代替它。

示例

Java

// Initializing marker options.
consumerController
    .getConsumerMapStyle()
    .addOnSuccessListener(
        consumerMapStyle -> {
          consumerMapStyle.setMarkerStyleOptions(
              MarkerType.TRIP_VEHICLE,
              new MarkerOptions()
                  .visible(false));
        });

// Reset marker options to default values.
consumerMapStyle.setMarkerStyleOptions(MarkerType.TRIP_VEHICLE, null);

Kotlin

// Initializing marker options.
consumerController
  .getConsumerMapStyle()
  .addOnSuccessListener({ consumerMapStyle ->
    consumerMapStyle.setMarkerStyleOptions(MarkerType.TRIP_VEHICLE, MarkerOptions().visible(false))
  })

// Reset marker options to default values.
consumerMapStyle.setMarkerStyleOptions(MarkerType.TRIP_VEHICLE, null)

自定义多段线

多段线自定义是使用 ConsumerMapStyle.setPolylineStyleOptions 方法设置的。设置自定义多段线选项会覆盖 Consumer SDK 提供的默认值。可通过对 PolylineOptions 参数调用 setPolylineStyleOptions 并使用 null 来恢复默认值。您可以使用 getPolylineStyleOptions 方法检索活跃的 PolylineOptions

多段线类型

以下多段线类型可进行自定义:

  • ACTIVE_ROUTE
  • REMAINING_ROUTE

ACTIVE_ROUTEREMAINING_ROUTE 在行程监控期间显示,表示车辆的路线

多段线属性

每条多段线的可用属性由 Google 地图 PolylineOptions 提供。PolylineOptions 是使用其构造函数构建的,而自定义属性则使用“Setter”样式方法指定。系统为每个属性提供了默认值,因此您只需指定自定义值即可。您可以通过将 visible 设为 false 来关闭多段线。

示例

Java

// Initializing polyline style options.
consumerController
    .getConsumerMapStyle()
    .addOnSuccessListener(
        consumerMapStyle -> {
          consumerMapStyle.setPolylineStyleOptions(
              PolylineType.ACTIVE_ROUTE,
              new PolylineOptions()
                  .visible(false));
        });

// Reset polyline options to default values.
consumerMapStyle.setPolylineStyleOptions(PolylineType.ACTIVE_ROUTE, null);

Kotlin

// Initializing polyline options.
consumerController
  .getConsumerMapStyle()
  .addOnSuccessListener({ consumerMapStyle ->
    consumerMapStyle.setPolylineStyleOptions(
      PolylineType.ACTIVE_ROUTE,
      PolylineOptions().visible(false)
    )
  })

// Reset polyline options to default values.
consumerMapStyle.setPolylineStyleOptions(PolylineType.ACTIVE_ROUTE, null)

有效路线和剩余路线

启用“行程和订单进度”后,您的应用可以使用显示车辆有效和剩余路线的多段线来自定义用户体验。

有效路线是指车辆为到达消费者当前行程中的下一个航点而当前所行驶的路径。剩余路线是车辆将经过有效路线的行驶路径。当有效航点是最后一个行程航点时,剩余路线不存在。

活跃多段线和其余多段线可进行自定义,可见性则由您的应用控制。默认情况下,有效路线可见,其余路线不可见。

示例

Java

// Initializing polyline options.
consumerController
    .getConsumerMapStyle()
    .addOnSuccessListener(
        consumerMapStyle -> {
          consumerMapStyle.setPolylineStyleOptions(
              PolylineType.ACTIVE_ROUTE,
              new PolylineOptions()
                  .color(Color.BLUE));
          consumerMapStyle.setPolylineStyleOptions(
              PolylineType.REMAINING_ROUTE,
              new PolylineOptions()
                  .color(Color.BLACK)
                  .width(5)
                  .visible(true));
        });

// Reset polyline options to default values.
consumerMapStyle.setPolylineStyleOptions(PolylineType.ACTIVE_ROUTE, null);
consumerMapStyle.setPolylineStyleOptions(PolylineType.REMAINING_ROUTE, null);

Kotlin

// Initializing polyline options.
consumerController
  .getConsumerMapStyle()
  .addOnSuccessListener({ consumerMapStyle ->
    {
      consumerMapStyle.setPolylineStyleOptions(
        PolylineType.ACTIVE_ROUTE,
        PolylineOptions().color(Color.BLUE)
      )

      consumerMapStyle.setPolylineStyleOptions(
        PolylineType.REMAINING_ROUTE,
        PolylineOptions().color(Color.BLACK).width(5).visible(true)
      )
    }
  })

// Reset polyline options to default values.
consumerMapStyle.setPolylineStyleOptions(PolylineType.ACTIVE_ROUTE, null)

consumerMapStyle.setPolylineStyleOptions(PolylineType.REMAINING_ROUTE, null)

路况感知多段线

默认情况下,多段线的路况图层处于停用状态。启用此选项后,系统会在路线多段线的 Z-index PolylineOptions.getZIndex() 外加一个偏移量(具体取决于路况)处绘制表示非正常路况延伸段的路段。

路况信息以四种速度类型之一表示。您可以为每种速度类型自定义颜色。

若要启用“路况感知多段线”,您必须构建一个 TrafficStyle 对象,然后调用 setPolylineTrafficStyle() 以将其传递给 ConsumerMapStyle

示例

Java

// TrafficStyle is part of the Consumer SDK.
TrafficStyle trafficStyle = TrafficStyle.builder()
  .setTrafficVisibility(true)
  .setTrafficColor(SpeedType.NO_DATA, Color.GREY)
  .setTrafficColor(SpeedType.NORMAL_VALUE, Color.BLUE)
  .setTrafficColor(SpeedType.SLOW_VALUE, Color.ORANGE)
  .setTrafficColor(SpeedType.TRAFFIC_JAM, Color.RED)
  .build();

consumerMapStyle.setPolylineTrafficStyle(PolylineType.ACTIVE_ROUTE, trafficStyle);

Kotlin

// TrafficStyle is part of the Consumer SDK.
val trafficStyle =
  TrafficStyle.builder()
    .setTrafficVisibility(true)
    .setTrafficColor(SpeedType.NO_DATA, Color.GREY)
    .setTrafficColor(SpeedType.NORMAL_VALUE, Color.BLUE)
    .setTrafficColor(SpeedType.SLOW_VALUE, Color.ORANGE)
    .setTrafficColor(SpeedType.TRAFFIC_JAM, Color.RED)
    .build()

consumerMapStyle.setPolylineTrafficStyle(PolylineType.ACTIVE_ROUTE, trafficStyle)

调整相机缩放以聚焦于旅程

Maps SDK 中内置的默认“我的位置”按钮会使相机以设备所在位置为中心。如果存在正在进行的“行程和订单进度”会话,您可能需要将摄像头居中,以便聚焦于行程而不是设备位置。

适用于 Android 的消费类 SDK 内置解决方案:AutoCamera

为了让您专注于历程而非设备位置,消费者 SDK 提供了一个默认启用的 AutoCamera 功能。相机会进行缩放,以聚焦于“行程和订单进度”路线以及下一个行程航点。

自定义相机行为

如果您需要更好地控制相机行为,可以使用 ConsumerController.setAutoCameraEnabled() 停用或启用 AutoCamera。

ConsumerController.getCameraUpdate() 会返回当前推荐的镜头边界。然后,您可以将此 CameraUpdate 作为参数提供给 GoogleMap.moveCamera()GoogleMap.animateCamera()