Как щелкнуть полигон GoogleMap под маркером? - PullRequest
1 голос
/ 05 марта 2019

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

enter image description here

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

То, что я пробовал до сих пор:

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Следуя предложению 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 голосов
/ 05 марта 2019
     GoogleMap.setOnPolygonClickListener(OnPolygonClickListener)

     GoogleMap mymap = ..//)init your app 
     mymap.setOnPolygonClickListener(new OnPolygonClickListener(){
     void onPolygonClick(Polygon polygon)
     {
     //do whatever you want with polygon 
     }  
     });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...