Мое приложение для Android использует GoogleMap
с Polygons
чтобы показать области, представляющие интерес для пользователя. Если пользователь нажимает на Polygon
событие щелчка обрабатывается OnPolygonClickListener
и отображается информационное диалоговое окно. Моя проблема связана с Marker
показывающим текущее местоположение пользователя, который блокирует события щелчка, передаваемые Polygon
ниже.
Sidenote: область щелчка маркера также кажется больше видимой. Этот круг фактически блокирует почти весь квадрат под ним.
Что я пробовал до сих пор:
Поймать событие клика и игнорировать его
getMap().setOnMarkerClickListener(new OnMarkerClickListener() {
public boolean onMarkerClick(Marker marker) {
return true;
}
});
В этом случае не работает, потому что мы можем либо возвратить false, который запускает поведение по умолчанию (увеличение масштаба маркера), либо true, который полностью игнорирует событие click, поскольку - в документации - для каждого клика есть только одно событие.
Так есть ли способ сделать Polygon
ниже Marker
кликабельным или хотя бы уменьшить область кликабельного маркера до видимого размера?
Следуя предложению MrUpsidown и используя googlemaps PolyUtil, я реализовал ручную проверку, чтобы вручную инициировать целевой клик Polygon
. Я не могу сказать об эффективности функции containsLocation()
при обработке большого количества полигонов, но пока это работает.
mMap.setOnMarkerClickListener { marker ->
if (marker == userLocation) {
mPolygons.forEach { polygon ->
if(PolyUtil.containsLocation(userLocation?.position, polygon.points, false)) {
// Do Polygon stuff here
return@forEach
}
}
true
} else {
// Do optional marker stuff here
true
}
}
GoogleMap.setOnPolygonClickListener(OnPolygonClickListener)
GoogleMap mymap = ..//)init your app
mymap.setOnPolygonClickListener(new OnPolygonClickListener(){
void onPolygonClick(Polygon polygon)
{
//do whatever you want with polygon
}
});