Dostosowywanie interfejsu Androida

ConsumerMapStyle klasa ma metody ustawiania i pobierania, które zapewniają dynamiczne dostosowywanie dla znaczników i linii łamanych. Ta klasa jest udostępniana asynchronicznie za pomocą metody ConsumerController.getConsumerMapStyle() .

Dostosowanie interfejsu jest kontynuowane w czasie obrotu urządzeń i obowiązuje do ConsumerController zostanie odłączony.

Znaczniki niestandardowe

Metoda ustawiania typu znacznika i jego właściwości to ConsumerMapStyle.setMarkerStyleOptions(). Twój niestandardowy opcje znacznika zastępują wartości domyślne podane przez pakiet SDK dla klientów indywidualnych. Aby przywrócić wartości domyślne, wywołaj funkcję setMarkerStyleOptions() z wartością null dla parametru MarkerOptions. Odzyskaj aktywną usługę MarkerOptions za pomocą getMarkerStyleOptions()

Typy znaczników

Dostępne są następujące znaczniki:

  • TRIP_PICKUP_POINT
  • TRIP_DROPOFF_POINT
  • TRIP_INTERMEDIATE_DESTINATION
  • TRIP_VEHICLE

TRIP_PICKUP_POINT i TRIP_DROPOFF_POINT wyświetlają się podczas monitorowania podróży.

TRIP_VEHICLE wyświetla się podczas monitorowania podróży. Ikona znacznika się nie zmienia w zależności od rzeczywistego typu pojazdu używanego w podróży. Aktualizacje pakietu SDK dla klientów indywidualnych obracanie ikony TRIP_VEHICLE podczas monitorowania podróży, by imitować zachowania rzeczywistego pojazdu podczas pokonywania trasy.

Opcje znacznika

Właściwości, które można dostosować, dostępne dla każdego znacznika to: miejsca zakwaterowania dostarczane przez Mapy Google MarkerOptions

Obiekt MarkerOptions został utworzony za pomocą swojego konstruktora, a właściwości niestandardowe określa się za pomocą parametru „Setter” stylu. Dla każdej usługi podawane są wartości domyślne, więc wystarczy, że określisz wartości niestandardowe.

Znacznik możesz wyłączyć, ustawiając visible na false. Należy zapewnić wystarczającą ilość danych, aby zamiast nich można było użyć własnego elementu interfejsu.

Przykład

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)

Niestandardowe linie łamane

Dostosowywanie linii łamanej jest ustawiane za pomocą metody ConsumerMapStyle.setPolylineStyleOptions. Ustawianie niestandardowych opcji linii łamanej zastępuje domyślne wartości podane przez pakiet SDK dla klientów indywidualnych. Wartości domyślne można przywrócić, dzwoniąc pod numer setPolylineStyleOptions z wartością null dla parametru PolylineOptions. Aktywny PolylineOptions można pobrać za pomocą Metoda getPolylineStyleOptions.

Typy linii łamanych

Dostępne są następujące typy linii łamanych:

  • ACTIVE_ROUTE
  • REMAINING_ROUTE

ACTIVE_ROUTE i REMAINING_ROUTE są wyświetlane podczas monitorowania podróży oraz reprezentują trasę pojazdu.

Właściwości linii łamanej

Dostosowywane właściwości każdej linii łamanej są określane w Mapach Google PolylineOptions. Obiekt PolylineOptions został utworzony za pomocą swojego konstruktora, a właściwości niestandardowe określa się za pomocą parametru „Setter” stylu. Wartości domyślne są podawane dla każdej usługi, więc wystarczy określić tylko wartości niestandardowe. Aby wyłączyć linię łamaną, ustaw visible na false.

Przykład

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)

Aktywna i pozostała trasa

Po włączeniu opcji Podróż i Postęp zamówień aplikacja może dostosować wrażenia użytkownika dotyczące korzystania z linii łamanych pokazujących aktywne i pozostałe pojazdy .

Aktywna trasa to ścieżka, do której aktualnie podróżuje pojazd. kolejny punkt na trasie aktywnej podróży klienta. Pozostała trasa to ścieżkę, jaką pokonuje pojazd, mijając aktywną trasę. Gdy aktywna trasa punkt pośredni jest ostatnim punktem na trasie podróży, reszta nie istnieje.

Aktywne i pozostałe linie łamane można dostosować oraz kontrolować widoczność przez Twoją aplikację. Domyślnie widoczna jest aktywna trasa, a pozostała trasa nie jest widoczny.

Przykład

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)

Linie łamane z uwzględnieniem natężenia ruchu

Warstwa ruchu linii łamanej jest domyślnie wyłączona. Po jego włączeniu segmenty reprezentują obszary nienormalnego ruchu są rysowane nad linią łamaną trasy z-index PolylineOptions.getZIndex() oraz przesunięcie w zależności od warunków ruchu.

Warunki na drogach są przedstawiane jako: czterech rodzajów prędkości. Możesz dostosować kolor do każdego rodzaju szybkości.

Aby włączyć „linie łamane uwzględniające natężenie ruchu”, musisz utworzyć obiekt TrafficStyle, który będzie przekazywany do ConsumerMapStyle przez wywołanie metody setPolylineTrafficStyle().

Przykład

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)

Dostosowywanie powiększenia aparatu w celu skoncentrowania się na podróży

Domyślny przycisk Moja lokalizacja wbudowaną w pakiet SDK Maps SDK ustawiają pozycję aparatu na lokalizację urządzenia. Jeśli aktywnej sesji Podróży i Postępu zamówienia, możesz wyśrodkować za pomocą aparatu, aby skupić się na podróży, a nie na lokalizacji urządzenia.

Wbudowany pakiet SDK dla użytkowników urządzeń z Androidem: AutoCamera

Aby umożliwić Ci skupienie się na podróży, a nie na lokalizacji urządzenia, pakiet Consumer SDK zapewnia domyślnie włączoną funkcję automatycznego aparatu. Aparat robi zbliżenie. by skupić się na trasie Podróży i Zamówienia oraz kolejnym punkcie pośrednim podróży.

Dostosowywanie działania kamery

Jeśli chcesz mieć większą kontrolę nad działaniem kamery, możesz ją wyłączyć lub włączyć Automatyczny aparat używający ConsumerController.setAutoCameraEnabled().

ConsumerController.getCameraUpdate() zwraca w danym momencie zalecane granice kamery. Dostępne opcje a następnie podaj CameraUpdate jako argument do GoogleMap.moveCamera() lub GoogleMap.animateCamera().

Definiowanie stylów map w Google Cloud

Zarówno ConsumerMapView oraz ConsumerMapFragment klas obsługują określanie stylów map w chmurze. Aby używać stylu map w chmurze, sprawdź, czy wybrane mapy mechanizm renderowania to LATEST. Poniższe przykłady pokazują, jak używać stosować w projekcie stylowanie map w chmurze.

ConsumerMapView

Aby w ConsumerMapView używać stylu map opartego na chmurze, ustaw atrybut mapId w GoogleMapOptions i przekazać GoogleMapOptions do getConsumerGoogleMapAsync(ConsumerMapReadyCallback, Fragment, GoogleMapOptions) or getConsumerGoogleMapAsync(ConsumerMapReadyCallback, FragmentActivity, GoogleMapOptions)

Przykład

Java

public class SampleAppActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ConsumerMapView mapView = findViewById(R.id.consumer_map_view);

    if (mapView != null) {
      GoogleMapOptions optionsWithMapId = new GoogleMapOptions().mapId("map-id");
      mapView.getConsumerGoogleMapAsync(
          new ConsumerMapReadyCallback() {
            @Override
            public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerGoogleMap) {
              // ...
            }
          },
          /* fragmentActivity= */ this,
          /* googleMapOptions= */ optionsWithMapId);
    }
  }
}

Kotlin

class SampleAppActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val mapView = findViewById(R.id.consumer_map_view) as ConsumerMapView

    val optionsWithMapId = GoogleMapOptions().mapId("map-id")
    mapView.getConsumerGoogleMapAsync(
      object : ConsumerGoogleMap.ConsumerMapReadyCallback() {
        override fun onConsumerMapReady(consumerGoogleMap: ConsumerGoogleMap) {
          // ...
        }
      },
      /* fragmentActivity= */ this,
      /* googleMapOptions= */ optionsWithMapId)
  }
}

ConsumerMapFragment

Istnieją 2 sposoby nadawania stylów map w chmurze ConsumerMapFragments:

  1. Statycznie z użyciem pliku XML.
  2. Dynamicznie z użyciem funkcji newInstance.

Statycznie za pomocą pliku XML

Aby użyć opartego na chmurze stylu map z użyciem kodu XML w pliku ConsumerMapFragment, dodaj atrybut XML map:mapId z określonym mapId Przyjrzyj się temu przykładowi:

<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:name="com.google.android.libraries.mapsplatform.transportation.consumer.view.ConsumerMapFragment"
    android:id="@+id/consumer_map_fragment"
    map:mapId="map-id"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Dynamicznie z użyciem newInstance

Aby używać stylu map w chmurze za pomocą usługi newInstance ConsumerMapFragment, ustaw pole mapId w domenie GoogleMapOptions i przekaż GoogleMapOptions do newInstance. Przyjrzyj się temu przykładowi:

Java

public class SampleFragmentJ extends Fragment {

  @Override
  public View onCreateView(
      @NonNull LayoutInflater inflater,
      @Nullable ViewGroup container,
      @Nullable Bundle savedInstanceState) {

    final View view = inflater.inflate(R.layout.consumer_map_fragment, container, false);

    GoogleMapOptions optionsWithMapId = new GoogleMapOptions().mapId("map-id");
    ConsumerMapFragment consumerMapFragment = ConsumerMapFragment.newInstance(optionsWithMapId);

    getParentFragmentManager()
        .beginTransaction()
        .add(R.id.consumer_map_fragment, consumerMapFragment)
        .commit();

    consumerMapFragment.getConsumerGoogleMapAsync(
        new ConsumerMapReadyCallback() {
          @Override
          public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerGoogleMap) {
            // ...
          }
        });

    return view;
  }
}

Kotlin

class SampleFragment : Fragment() {
  override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?): View? {

    val view = inflater.inflate(R.layout.consumer_map_fragment, container, false)

    val optionsWithMapId = GoogleMapOptions().mapId("map-id")
    val consumerMapFragment = ConsumerMapFragment.newInstance(optionsWithMapId)

    parentFragmentManager
      .beginTransaction()
      .add(R.id.consumer_map_fragment, consumerMapFragment)
      .commit()

    consumerMapFragment.getConsumerGoogleMapAsync(
      object : ConsumerMapReadyCallback() {
        override fun onConsumerMapReady(consumerGoogleMap: ConsumerGoogleMap) {
          // ...
        }
      })

    return view
  }
}