Osmdroid MapEventsReceiver с маркером не работает

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

Это может помочь вам получить больше и более качественные ответы, если вы включите простой фрагмент кода, где мы могли бы увидеть, как вы на самом деле обрабатываете слушателей. Это не обязательно, но поможет нам узнать, что вы на самом деле делаете и как.

Josef Adamcik 08.04.2019 10:39
0
1
332
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема с 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.

Другие вопросы по теме