Как создать маркер с собственным представлением

Трехмерное изображение Нью-Йорка с Эмпайр-стейт-билдинг и тремя цифровыми маркерами над ним, включая мультяшную гориллу с надписью

Вы можете использовать MarkerView, чтобы отображать специальные иерархии View Android в виде маркеров на 3D-карте. С помощью маркеров пользовательских представлений можно показывать сложные макеты пользовательского интерфейса, интерактивные виджеты и анимации, привязанные к географическим координатам.

Как добавить маркер пользовательского представления

Чтобы добавить на карту маркер с пользовательским представлением, создайте экземпляр MarkerViewOptions, настройте его местоположение с помощью setPosition, используя объект LatLngAltitude, и укажите пользовательский объект View Android с помощью setContent. Затем передайте параметры в addMarkerView в экземпляре GoogleMap3D.

Если вы не предоставите представление для setContent, SDK создаст и отрисует представление по умолчанию 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)

Настройка PinView по умолчанию

Вместо того чтобы создавать полностью настраиваемый объект View для Android, вы можете создать маркер с нужными вам свойствами, используя объект PinView с настраиваемым объектом PinConfiguration (или обновив существующий экземпляр с помощью setPinConfiguration) и передав его в 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)

Как обрабатывать взаимодействия и анимацию

Поскольку MarkerView является оболочкой для View Android, вы можете прикреплять стандартные прослушиватели кликов и просматривать анимацию непосредственно в представлении, возвращаемом методом getContent.

Кроме того, MarkerView реализует Anchorable, что позволяет привязать Popover к представлению маркера с помощью addPopover:

markerView?.content?.setOnClickListener { view ->
    // Animate the view when clicked
    view.animate().rotationBy(90f).setDuration(300).start()
}

Настройка высоты и поведения при наложении

Вы можете настроить вертикальное положение объекта MarkerView и его взаимодействие с наложенными ярлыками или маркерами:

Доступность и удаление

Вы должны самостоятельно настроить свойства специальных возможностей, например contentDescription, в пользовательском объекте View Android, который передается в setContent.

Чтобы удалить MarkerView с карты, вызовите remove:

markerView?.remove()