volga-volga / react-native-yamap

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

При множестве маркеров не выбирается нужный на Android #76

Open Metallistener opened 2 years ago

Metallistener commented 2 years ago

@ownikss Замечен баг на android, если кликать на нужный маркер то координаты резко меняются на другие, то есть после клика выбирается координат маркера верно но после этого будто происходит еще один невидимый клик по карте который перебивает координаты выбранного маркера. Такое происходит только на android. Если вместо onPress у Marker использовать onLongPress то все нормально работает, но в моем случае onLongPress не актуален так как нужна моментальная обработка клика. Есть идеи почему это может быть? z-index у Marker тоже пробовал выставить, не помогает(

aylok1n commented 2 years ago

@Metallistener нашел решение?

youngblader commented 2 years ago

баг на android, @ownikss. Недавно обнаружил тоже самое, есть у кого нибудь решение проблемы? Android отрабатывает в несколько кликов. По IOS - все нормально. Могу предположить, что Android не понимает zIndex, насколько знаю android воспринимает только elevation.

wfrsnk commented 1 year ago

@Metallistener @youngblader @aylok1n Удалось найти решение проблемы ?

aylok1n commented 1 year ago

@wfrsnk нет, проект провалили, денег не получили. Библа топ)

Splinterjke commented 1 year ago

Here is the workaround:

const [lastMarkerClickTimestamp, setLastMarkerClickTimestamp] = useState(Date.now());
<YMarker
   // props
   onPress={() => {
        const now = Date.now();
        if (now - lastMarkerClickTimestamp < 300) return; // 300 ms is fine, but tuneable
        setLastMarkerClickTimestamp(now);
        onPressMarker(marker);
   }}>
    // children
</YMarker>

Feel free to use.

pavlenstory commented 2 months ago

на реальном устройстве не работает, в эмуляторе работает

Here is the workaround:

const [lastMarkerClickTimestamp, setLastMarkerClickTimestamp] = useState(Date.now());
<YMarker
   // props
   onPress={() => {
        const now = Date.now();
        if (now - lastMarkerClickTimestamp < 300) return; // 300 ms is fine, but tuneable
        setLastMarkerClickTimestamp(now);
        onPressMarker(marker);
   }}>
    // children
</YMarker>

Feel free to use.