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:
- Tryb wysokości: wywołaj
setAltitudeModewMarkerViewOptionsze stałąAltitudeMode. DomyślnieMarkerViewOptionsużywaAltitudeMode.CLAMP_TO_GROUND. - Zachowanie przy kolizji znaczników: wywołaj
setCollisionBehaviorze stałąCollisionBehavior(domyślnieCollisionBehavior.REQUIRED), i użyjsetCollisionPriorityaby określić priorytet wyświetlania w przypadku kolizji znaczników.
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()