Criar marcadores com visualizações personalizadas

Imagem 3D da cidade de Nova York com o Empire State Building e três marcadores digitais personalizados flutuando acima dele, incluindo um gorila de desenho animado com o rótulo

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:

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