volga-volga / react-native-yamap

React Native Yandex Maps | Яндекс Карты | Yandex.MapKit implementation for react native | YandexMaps
144 stars 80 forks source link

How to prevent override Marker onPress handler by onMapPress handler on Android #221

Open Metallistener opened 1 year ago

Metallistener commented 1 year ago

The problem is if you have marker with children inside and you want to handle Marker's onPress event to get Marker's position (lat, lon) and save them at the same time when you press on Marker the onMapPress event fires and override Marker's lat, lon coordinates by onMapPress coordinates, so because of that I cannot to save in the state Marker's coordinates that was pressed.

Is there any solution to fix this problem on Android? I've tried to use zIndex prop but it doesn't work(


Проблема в том, что если у вас есть маркер с дочерними элементами внутри, и вы хотите обработать событие onPress маркера чтобы получить положение маркера (широта, долгота) и сохранить эти координаты, то одновременно с тем когда вы нажимаете на маркер, событие onMapPress срабатывает и переопределяет координаты широты и долготы кликнутного маркера координатами onMapPress события, поэтому из-за этого я не могу сохранить в состоянии координаты маркера который был прожат

Есть ли решение этой проблемы на Android? Я пытался использовать zIndex prop, но он не работает (

fkcoder2 commented 1 year ago

Решил данный момент путём запоминания последнего клика по маркеру (event.timeStamp) и сравнивания его в onMapPress в пределах 100 мс. Другого выхода не нашёл.

Metallistener commented 1 year ago

Решил данный момент путём запоминания последнего клика по маркеру (event.timeStamp) и сравнивания его в onMapPress в пределах 100 мс. Другого выхода не нашёл.

ммм, понял, попробую использовать данный костыль в таком случае, спасибо!

Metallistener commented 1 year ago

Решил данный момент путём запоминания последнего клика по маркеру (event.timeStamp) и сравнивания его в onMapPress в пределах 100 мс. Другого выхода не нашёл.

Привет, немного не понял как ты это сделал, можешь поделиться исходником подсмотреть? А то что-то пытаюсь сделать, но что-то пока безуспешно, может в твоем случае ты на карте работаешь только с маркерами? Если так то у меня можно тыкать как на маркер так и на карту

fkcoder2 commented 1 year ago

Решил данный момент путём запоминания последнего клика по маркеру (event.timeStamp) и сравнивания его в onMapPress в пределах 100 мс. Другого выхода не нашёл.

Привет, немного не понял как ты это сделал, можешь поделиться исходником подсмотреть? А то что-то пытаюсь сделать, но что-то пока безуспешно, может в твоем случае ты на карте работаешь только с маркерами? Если так то у меня можно тыкать как на маркер так и на карту

Привет. У меня клики как по карте, так и по полигону с маркерами В компоненте прописываю:

const [lastPress, setLastPress] = useState(false);

В маркере:

 onPress={(e) => {
    setLastPress(e.timeStamp);
    //что-то делаем при клике на маркер
}

В карте:

 onMapPress={(e) => {

   if (e.timeStamp - lastPress > 100) {
       //тут будет обработка когда клик был точно не по маркеру
      setLastPress(false);
   }
}}

У меня такой глюк был только на андроиде, путем опытов выяснил что клик по маркеру отрабатывает первым - потому и пришло такое решение