Вы можете использовать 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 и его взаимодействие с наложенными ярлыками или маркерами:
- Режим высоты. Вызовите
setAltitudeModeдляMarkerViewOptionsс константойAltitudeMode. По умолчаниюMarkerViewOptionsиспользуетAltitudeMode.CLAMP_TO_GROUND. - Поведение при наложении. Вызовите
setCollisionBehaviorс константойCollisionBehavior(по умолчанию используетсяCollisionBehavior.REQUIRED) и используйтеsetCollisionPriority, чтобы задать приоритет отображения при наложении маркеров.
Доступность и удаление
Вы должны самостоятельно настроить свойства специальных возможностей, например contentDescription, в пользовательском объекте View Android, который передается в setContent.
Чтобы удалить MarkerView с карты, вызовите remove:
markerView?.remove()