Puoi utilizzare
MarkerView
per eseguire il rendering delle gerarchie di View Android personalizzate come indicatori su una mappa 3D. Gli indicatori di visualizzazione personalizzati ti consentono di mostrare layout dell'interfaccia utente avanzati, widget interattivi e animazioni di visualizzazione ancorati alle coordinate geografiche.
Aggiungere un indicatore di visualizzazione personalizzato
Per aggiungere un indicatore di visualizzazione personalizzato alla mappa, crea un'
MarkerViewOptions
istanza, configura la sua posizione con
setPosition
utilizzando un oggetto
LatLngAltitude
e fornisci la tua View Android personalizzata utilizzando
setContent.
Poi, passa le opzioni a
addMarkerView
nella tua
GoogleMap3D
istanza.
Se non fornisci una visualizzazione a
setContent,
l'SDK crea ed esegue il rendering di un
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)
Personalizzare PinView predefinito
Anziché creare un Android View completamente personalizzato, puoi eseguire il rendering di un indicatore personalizzato creando un
PinView
con un
PinConfiguration
personalizzato (o aggiornando un'istanza esistente con
setPinConfiguration)
e passandolo a
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)
Gestire interazioni e animazioni
Poiché un
MarkerView
esegue il wrapping di una View Android, puoi collegare i listener di clic standard e visualizzare le
animazioni direttamente alla visualizzazione restituita da
getContent.
Inoltre,
MarkerView
implementa
Anchorable,
che ti consente di ancorare un
Popover
alla visualizzazione dell'indicatore utilizzando
addPopover:
markerView?.content?.setOnClickListener { view ->
// Animate the view when clicked
view.animate().rotationBy(90f).setDuration(300).start()
}
Configurare il comportamento di altitudine e collisione
Puoi personalizzare il posizionamento verticale di un
MarkerView
e il modo in cui interagisce con le etichette o gli
indicatori della mappa sovrapposti:
- Modalità altitudine: chiama
setAltitudeModesuMarkerViewOptionscon unaAltitudeModecostante. Per impostazione predefinita,MarkerViewOptionsutilizzaAltitudeMode.CLAMP_TO_GROUND. - Comportamento della sovrapposizione: chiama
setCollisionBehaviorcon una costanteCollisionBehavior(il valore predefinito èCollisionBehavior.REQUIRED), e utilizzasetCollisionPriorityper specificare la priorità di visualizzazione quando gli indicatori si sovrappongono.
Accessibilità e rimozione
Hai la responsabilità di configurare le proprietà di accessibilità, ad esempio
contentDescription—nella View Android personalizzata fornita a
setContent.
Per rimuovere un
MarkerView
dalla mappa, chiama
remove:
markerView?.remove()