Você pode usar
MarkerView
para renderizar hierarquias View personalizadas do Android como marcadores em um mapa 3D. Os marcadores de visualização personalizados permitem mostrar layouts de interface avançados, widgets interativos e animações de visualização ancoradas em coordenadas geográficas.
Adicionar um marcador de visualização personalizado
Para adicionar um marcador de visualização personalizado ao mapa, crie uma
MarkerViewOptions
instância, configure o local dela com
setPosition
usando um
LatLngAltitude
objeto e forneça sua View personalizada do Android usando
setContent.
Em seguida, transmita as opções para
addMarkerView
na instância
GoogleMap3D.
Se você não fornecer uma visualização para
setContent,
o SDK vai criar e renderizar um
PinView padrão.
// 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)
Personalizar o PinView padrão
Em vez de criar um View do Android totalmente personalizado, você pode renderizar um
pin personalizado criando um
PinView
com uma
PinConfiguration
personalizada (ou atualizando uma instância atual com
setPinConfiguration)
e transmitindo-o para
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)
Processar interações e animações
Como um
MarkerView
envolve uma View do Android, você pode anexar listeners de clique padrão e animação de visualização
diretamente à visualização retornada por
getContent.
Além disso,
MarkerView
implementa
Anchorable,
que permite ancorar um
Popover
à visualização do marcador usando
addPopover:
markerView?.content?.setOnClickListener { view ->
// Animate the view when clicked
view.animate().rotationBy(90f).setDuration(300).start()
}
Configurar a altitude e o comportamento em caso de conflito
Você pode personalizar a posição vertical de um
MarkerView
e como ele interage com rótulos de mapa ou
marcadores sobrepostos:
- Modo de altitude: chame
setAltitudeModeemMarkerViewOptionscom uma constanteAltitudeMode. Por padrão,MarkerViewOptionsusaAltitudeMode.CLAMP_TO_GROUND. - Comportamento em caso de conflito: chame
setCollisionBehaviorcom uma constanteCollisionBehavior(o padrão éCollisionBehavior.REQUIRED), e usesetCollisionPrioritypara especificar a prioridade de exibição quando os marcadores entrarem em conflito.
Acessibilidade e remoção
Você é responsável por configurar propriedades de acessibilidade, como
contentDescription—na View personalizada do Android fornecida para
setContent.
Para remover um
MarkerView
do mapa, chame
remove:
markerView?.remove()