如何触发Google Maps V2 for Android上标记的onClick事件?

时间:2015-04-22 14:46:03

标签: android google-maps google-maps-markers google-maps-android-api-2

有没有办法手动调用特定标记的onClick事件(没有物理点击标记)?

7 个答案:

答案 0 :(得分:10)

不,但您可以模拟onClick事件。单击标记时会发生两件事:

  1. 显示相应点击标记的信息窗口。
  2. 相机平移到标记处。
  3. 以上两行代码可以实现上述目标:

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

答案 1 :(得分:3)

试试这个,

从地图类

实施标记点击侦听器
public class MapView extends FragmentActivity implements OnMarkerClickListener{}

它将覆盖onMarkerClickEvent,如下所示,

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

答案 2 :(得分:1)

答案是否定的。您无法单独设置特定标记的onClick

但是,使用Map.setOnMarkerClickListener(_)可以为所有此类事件设置侦听器。只要单击任何标记,您就应该能够在侦听器中检索marker对象。您可以使用一些标识来查看这是否是您想要的特定标记并相应地采取行动。 识别可以是特定于该标记的任何属性,title是显而易见的选择。但是,您可以使用任何所需的属性过滤标记。

答案 3 :(得分:1)

,您无法直接(从代码中)触发标记点击事件。

您可以使用mMap.setOnMarkerClickListener(...);来处理标记点击事件。

但是,如果您在WebView中使用地图,则有另一种选择,因此您可以使用JavaScript触发标记点击事件:

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

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

答案 4 :(得分:0)

您可以模拟标记点击。创建从MarkerManager类扩展的MyMarkerManager类。

该类具有onMarkerClick()函数,您可以手动调用该函数来模拟事件。

有关详细信息,请参阅此链接。 https://github.com/googlemaps/android-maps-utils/blob/master/library/src/com/google/maps/android/MarkerManager.java

答案 5 :(得分:0)

我偶然发现了这个问题,没有得到答案的帮助。因此,对于将来的读者-如果您要添加temp[[ str(func.__name__) + s for s in cols]],那就很简单了。

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) return@OnMarkerClickListener false } 都会呼叫yourClickHandler,并且您在其中所做的一切都会发生。另外,当您不想以编程方式按下标记时,只需将该标记传递到markerClickHandler()

答案 6 :(得分:0)

GoogleMap对象具有方法Marker addMarker(mk: MarkerOptions),该方法返回正确的Marker而不是MarkerOptions

因此,一旦添加它,就可以如下模拟点击行为:

fun addAndZoom(mk: MarkerOptions, needsHighlight: Boolean) {
    mapView.getMapAsync { map ->
        val actualMarker = map.addMarker(mk)
        if(needsHighlight) {
            val cameraUpdate = CameraUpdateFactory.newLatLngZoom(mk.position, 14F)
            map.animateCamera(cameraUpdate)
            actualMarker.showInfoWindow()
        }
    }
}