Tworzenie znaczników z widokami niestandardowymi

Obraz 3D Nowego Jorku przedstawiający Empire State Building z 3 niestandardowymi znacznikami cyfrowymi unoszącymi się nad nim, w tym z rysunkowym gorylem z etykietą

Za pomocą MarkerView możesz renderować niestandardowe hierarchie View na Androidzie jako znaczniki na mapie 3D. Znaczniki widoku niestandardowego umożliwiają wyświetlanie bogatych układów interfejsu, interaktywnych widżetów i animacji widoku zakotwiczonych w współrzędnych geograficznych.

Dodawanie znacznika widoku niestandardowego

Aby dodać do mapy znacznik widoku niestandardowego, utwórz instancję MarkerViewOptions , skonfiguruj jej lokalizację za pomocą setPosition przy użyciu obiektu LatLngAltitude i podaj niestandardowy widok Androida View za pomocą setContent. Następnie przekaż opcje do addMarkerView w instancji GoogleMap3D.

Jeśli nie podasz widoku do setContent, pakiet SDK utworzy i wyrenderuje domyślny PinView.

// Add imports
import android.widget.TextView
import com.google.android.gms.maps3d.model.MarkerViewOptions
import com.google.android.gms.maps3d.model.latLngAltitude

// Create a custom Android View
val badgeView = TextView(context).apply {
    text = "Empire State Building"
    contentDescription = "Marker for Empire State Building"
    setPadding(24, 12, 24, 12)
}

// Configure MarkerViewOptions and add the marker view to the map
val options = MarkerViewOptions().apply {
    position = latLngAltitude {
        latitude = 40.7484
        longitude = -73.9857
        altitude = 100.0
    }
    content = badgeView
}

val markerView = googleMap3D.addMarkerView(options)

Dostosowywanie domyślnego PinView

Zamiast tworzyć całkowicie niestandardowy Android View, możesz wyrenderować dostosowany znacznik, tworząc PinView z niestandardową PinConfiguration (lub aktualizując istniejącą instancję za pomocą setPinConfiguration) i przekazując ją do setContent.

// Add imports
import android.graphics.Color
import com.google.android.gms.maps3d.model.MarkerViewOptions
import com.google.android.gms.maps3d.model.PinView
import com.google.android.gms.maps3d.model.latLngAltitude
import com.google.android.gms.maps3d.model.pinConfiguration

// Create a customized PinView
val customPinView = PinView(context, pinConfiguration {
    backgroundColor = Color.BLUE
    borderColor = Color.WHITE
})

// Configure MarkerViewOptions and add the marker view to the map
val options = MarkerViewOptions().apply {
    position = latLngAltitude {
        latitude = 40.7484
        longitude = -73.9857
        altitude = 100.0
    }
    content = customPinView
}

val markerView = googleMap3D.addMarkerView(options)

Obsługa interakcji i animacji

Ponieważ MarkerView otacza widok View na Androidzie, możesz do widoku zwracanego przez getContent dołączyć standardowe detektory kliknięć i animacje widoku.

Dodatkowo MarkerView implementuje Anchorable, co pozwala zakotwiczyć Popover w widoku znacznika za pomocą addPopover:

markerView?.content?.setOnClickListener { view ->
    // Animate the view when clicked
    view.animate().rotationBy(90f).setDuration(300).start()
}

Konfigurowanie wysokości i zachowania w przypadku kolizji

Możesz dostosować sposób pionowego ustawienia MarkerView oraz sposób jego interakcji z nakładającymi się etykietami lub znacznikami na mapie:

Ułatwienia dostępu i usuwanie

Odpowiadasz za skonfigurowanie właściwości ułatwień dostępu, takich jak contentDescription—w niestandardowym widoku na Androidzie View przekazanym do setContent.

Aby usunąć MarkerView z mapy, wywołaj remove:

markerView?.remove()