Osmdroid MapEventsReceiver с маркером не работает - PullRequest
0 голосов
/ 07 апреля 2019

Привет, я создаю Фрагмент, когда добавляю MapEventsReceiver для определения типа фигуры (Прямоугольник, Полигон, Линия, Маркер и т. Д.), Чтобы определить форму.Но у меня есть проблема с маркером, я не могу определить, когда маркер нажимается.Я добавляю сообщение Toast, когда нажимаю на карту (метод MapEventsReceiver longPressHelper ()), и когда я щелкаю по всем фигурам, он работает идеально, но не в Marker (он запускается по методу onLongPress из класса marker).Можно добавить прослушиватель маркера в longPressHelper из MapEventReceiver (я хочу обнаружить нажатие маркера в longPressHelper)?

1 Ответ

1 голос
/ 08 апреля 2019

Проблема с Marker заключается в том, что он фактически обрабатывает длинное нажатие сам по себе и предотвращает его распространение.

Если вы проверяете исходный код Marker

@Override public boolean onLongPress(final MotionEvent event, final MapView mapView) {
        boolean touched = hitTest(event, mapView);
        if (touched){
            if (mDraggable){
                //starts dragging mode:
                mIsDragged = true;
                closeInfoWindow();
                if (mOnMarkerDragListener != null)
                    mOnMarkerDragListener.onMarkerDragStart(this);
                moveToEventPosition(event, mapView);
            }
        }
        return touched;
    }

Вы можете видеть, что при длительном нажатии на маркер метод возвращает значение true, а это означает, что событие касания не будет распространено ни на другие наложения, ни на MapView.

Однако, если вам не нужнофункциональность перетаскивания маркера, вы можете расширить класс Marker самостоятельно и переопределить поведение:

@Override public boolean onLongPress(final MotionEvent event, final MapView mapView) {
   return false;
}

Теперь, если вы используете производный класс, долгое нажатие должно быть распространено на MapView.

...