Creare indicatori con visualizzazioni personalizzate

Immagine 3D di New York con l'Empire State Building e tre indicatori digitali personalizzati che fluttuano sopra, tra cui un gorilla in stile cartone animato con l'etichetta

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:

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()