Yandex MapKit Android как сделать нажатие на маркер?
Приложение получает координаты точек, добавляет их в список и создает кластеры из них
val clusterizedCollection =
mapYa.map.mapObjects.addClusterizedPlacemarkCollection(this)
GlobalScope.launch(Dispatchers.Main) {
val points = createPoints()
clusterizedCollection.addPlacemarks(points, imageProvider, IconStyle())
clusterizedCollection.clusterPlacemarks(60.0, 15)
}
Для кластеров есть метод onClusterTap, но как сделать теперь слушатель нажатий для маркера и например отобразить его координаты?
UPD: Так тоже не работает, при нажатии ничего не происходит
var pointCollection:MapObjectCollection = mapYa.map.mapObjects.addCollection();
pointCollection.addTapListener { mapObject, point ->
val latitude = point.latitude
val longitude = point.longitude
if (mapObject is PlacemarkMapObject) {
val placemark = mapObject as PlacemarkMapObject
val pointGeometry = placemark.geometry as Point
val placemarkLatitude = pointGeometry.latitude
val placemarkLongitude = pointGeometry.longitude
val context = applicationContext
Toast.makeText(this, "Метка: ($placemarkLatitude, $placemarkLongitude)", Toast.LENGTH_SHORT).show()
true
} else {
false
}
}
Ответы (2 шт):
Можно использовать метод addTapListener на каждом маркере
points.forEach { point ->
point.addTapListener { _, _ ->
// Обработка нажатия на маркер
val position = point.geometry as GeoPoint
Log.d("Marker", "Latitude: ${position.latitude}, Longitude: ${position.longitude}")
true // Возвращаем true, чтобы остановить всплывающее окно кластера
}
}
Когда пользователь нажимает на маркер, выводятся координаты маркера в консоль через Log.d. Чтобы показать координаты маркера на экране,можно сделать так
points.forEach { point ->
point.addTapListener { _, _ ->
// Обработка нажатия на маркер
val position = point.geometry as GeoPoint
val message = "Latitude: ${position.latitude}, Longitude: ${position.longitude}"
Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
true // Возвращаем true, чтобы остановить всплывающее окно кластера
}
}
Похоже, вам требуется добавить слушатель addTapListener на ClusterizedPlacemarkCollection – ClusterizedPlacemarkCollection.addTapListener.
Тогда в метод onMapObjectTap придет ссылка на нажатый объект.