Как щелкнуть полигон GoogleMap под маркером?

1

Мое приложение для Android использует GoogleMap с Polygons чтобы показать области, представляющие интерес для пользователя. Если пользователь нажимает на Polygon событие щелчка обрабатывается OnPolygonClickListener и отображается информационное диалоговое окно. Моя проблема связана с Marker показывающим текущее местоположение пользователя, который блокирует события щелчка, передаваемые Polygon ниже.

Изображение 174551

Sidenote: область щелчка маркера также кажется больше видимой. Этот круг фактически блокирует почти весь квадрат под ним.

Что я пробовал до сих пор:

  • Поймать событие клика и игнорировать его

    getMap().setOnMarkerClickListener(new OnMarkerClickListener() {
        public boolean onMarkerClick(Marker marker) {
            return true;
        }
    });
    

В этом случае не работает, потому что мы можем либо возвратить false, который запускает поведение по умолчанию (увеличение масштаба маркера), либо true, который полностью игнорирует событие click, поскольку - в документации - для каждого клика есть только одно событие.

  • Изменение z-индекса многоугольника: не работает, потому что, опять-таки для каждой документации, "фактически считается, что маркеры находятся в отдельной группе z-index по сравнению с другими наложениями или фигурами, независимо от z-индекса других наложений" поэтому события клика всегда передаются потенциальным маркерам.

Так есть ли способ сделать Polygon ниже Marker кликабельным или хотя бы уменьшить область кликабельного маркера до видимого размера?

Теги:
google-maps
marker

2 ответа

0
Лучший ответ

Следуя предложению 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
            }
    }
0
     GoogleMap.setOnPolygonClickListener(OnPolygonClickListener)

     GoogleMap mymap = ..//)init your app 
     mymap.setOnPolygonClickListener(new OnPolygonClickListener(){
     void onPolygonClick(Polygon polygon)
     {
     //do whatever you want with polygon 
     }  
     });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню