Подтвердить что ты не робот

Не привязывайтесь к маркеру после нажатия на android map v2

В настоящее время Android Map v2 после щелчка привязывается к местоположению маркера. Я хочу отключить это поведение, но не вижу никаких параметров для этого.

Кто-нибудь знает, как это исправить?

4b9b3361

Ответ 1

Основываясь на том, что я читал с маркеров - API Android Google Maps (https://developers.google.com/maps/documentation/android/marker#marker_click_events)

События кликов маркера

Вы можете использовать OnMarkerClickListener для прослушивания событий щелчка на маркере. Устанавливать     этот слушатель на карте, вызовите GoogleMap.setOnMarkerClickListener(OnMarkerClickListener).     Когда пользователь нажимает на маркер, будет вызываться onMarkerClick (Marker), и маркер будет     передаются в качестве аргумента. Этот метод возвращает логическое значение, указывающее,     вы воспользовались событием (т.е. хотите подавить поведение по умолчанию). Если оно     возвращает false, тогда поведение по умолчанию будет происходить в дополнение к вашему пользовательскому поведению.     Поведение по умолчанию для события щелчка маркера - это отображение его информационного окна (если доступно)     и переместите камеру таким образом, чтобы маркер находился на карте.

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

// Since we are consuming the event this is necessary to
// manage closing opened markers before opening new ones
Marker lastOpened = null;

mMap.setOnMarkerClickListener(new OnMarkerClickListener() {
    public boolean onMarkerClick(Marker marker) {
        // Check if there is an open info window
        if (lastOpened != null) {
            // Close the info window
            lastOpened.hideInfoWindow();

            // Is the marker the same marker that was already open
            if (lastOpened.equals(marker)) {
                // Nullify the lastOpened object
                lastOpened = null;
                // Return so that the info window isn't opened again
                return true;
            } 
        }

        // Open the info window for the marker
        marker.showInfoWindow();
        // Re-assign the last opened such that we can close it later
        lastOpened = marker;

        // Event was handled by our code do not launch default behaviour.
        return true;
    }
});

Это непроверенный код, но это может быть работоспособное решение.

Спасибо, DMan

Ответ 2

Похоже, что мы должны сделать следующее, но из-за эта ошибка, это не работает, потому что marker.isInfoWindowShown() всегда возвращает ложь:

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
    public boolean onMarkerClick(Marker marker) {
        if (marker.isInfoWindowShown()) {
            marker.hideInfoWindow();
        } else {
            marker.showInfoWindow();
        }
        return true;
    }
});

Тем не менее, следующее имеет тот же эффект и работает:

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

    Marker currentShown;

    public boolean onMarkerClick(Marker marker) {
        if (marker.equals(currentShown)) {
            marker.hideInfoWindow();
            currentShown = null;
        } else {
            marker.showInfoWindow();
            currentShown = marker;
        }
        return true;
    }
});

Потому что одновременно отображается только одно информационное окно (как указано в Руководстве разработчика Google Maps API v2), нам нужно только беспокоиться о скрытии информационного окна, если щелкнуть маркер, чье информационное окно в настоящее время открыто.