it-swarm.com.ru

Как вызвать событие onClick маркера в Google Maps V2 для Android?

Есть ли способ вызвать событие onClick определенного маркера вручную (без физического нажатия на маркер)?

9
mustafa

Нет, но вы можете смоделировать событие onClick. При нажатии на маркер происходит 2 вещи:

  1. Отображается информационное окно для соответствующего кликаемого маркера.
  2. Камера показывает маркер.

Выше можно достичь с помощью 2 строк кода:

marker.showInfoWindow();
map.animateCamera(CameraUpdateFactory.newLatLng(marker.getPosition()), 250, null);
9
iflp

Попробуй это ,

Реализовать приемник щелчков маркером в классе карты

public class MapView extends FragmentActivity implements OnMarkerClickListener{}

он переопределит onMarkerClickEvent следующим образом:

@Override
public boolean onMarkerClick(final Marker marker) {}
3
Heshan Sandeepa

Ответ - нет. Вы не можете установить onClick определенного маркера отдельно.

Однако, используя Map.setOnMarkerClickListener(_), вы можете установить прослушиватель для всех таких событий. Вы должны быть в состоянии получить объект marker в слушателе, вызываемом всякий раз, когда нажимается любой маркер. Вы можете использовать некоторую идентификацию, чтобы увидеть, является ли это конкретный маркер, который вы хотите, и действовать соответственно. Идентификацией может быть любое из свойств, характерных для этого маркера, title является очевидным выбором. Однако вы можете фильтровать маркеры, используя любое желаемое свойство.

1
shujj

НЕТ, вы не можете инициировать событие щелчка маркера напрямую (из кода).

Вы можете просто использовать mMap.setOnMarkerClickListener(...);, чтобы обрабатывать событие щелчка маркеров.


Но есть альтернатива, если вы используете свою карту в WebView , поэтому вы можете вызвать событие щелчка маркера с помощью JavaScript:

//In V2 version:
GEvent.trigger(markers[i], 'click');

//In V3 version:
google.maps.event.trigger(markers[i], 'click');
1
Rami

Я просто наткнулся на это и мне не помогли ответы. Так что для будущих читателей - если вы добавляете map.setOnMarkerClickListener(yourClickHandler), то это довольно просто.

Абстрагируйте логику от yourClickHandler и сохраните ссылку на все маркеры ... Т.е.

private val markers = arrayListOf<Marker>()

Везде, где вы добавляете свои маркеры на карту, также добавляйте их в свой массив markers. То есть что-то вроде

val marker = MarkerOptions().position(...).......
markers.add(map.addMarker(marker))

И yourClickHandler будет выглядеть примерно так

val yourClickHandler = GoogleMap.OnMarkerClickListener {
    markerClickHandler(marker = it)
    [email protected] false
}

Теперь, когда вы нажимаете маркер на карте, yourClickHandler будет вызывать markerClickHandler(), и все, что вы там делаете, произойдет. Кроме того, когда вы не хотите нажимать маркер программно, просто передайте этот маркер markerClickHandler.

0
Algar

Вы МОЖЕТЕ симулировать щелчок маркером. Создайте свой класс MyMarkerManager, выходящий из класса MarkerManager.

В классе есть функция onMarkerClick (), которую вы можете вызвать вручную для имитации события.

Для более подробной информации обратитесь по этой ссылке. https://github.com/googlemaps/Android-maps-utils/blob/master/library/src/com/google/maps/Android/MarkerManager.Java

0
Yuvi