【问题标题】:How to trigger the onClick event of a marker on a Google Maps V2 for Android?如何在适用于 Android 的 Google Maps V2 上触发标记的 onClick 事件?
【发布时间】:2015-06-30 07:48:12
【问题描述】:

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

【问题讨论】:

  • mMap.setOnMarkerClickListener(...); 呢?
  • Rami 如何以编程方式调用该侦听器(无需实际单击标记)

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


【解决方案1】:

试试这个,

从您的地图类中实现标记点击监听器,

public class MapView extends FragmentActivity implements OnMarkerClickListener{}

它将覆盖onMarkerClickEvent,如下所示,

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      ,您不能直接触发标记点击事件(来自代码)。

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


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

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

      【讨论】:

        【解决方案4】:

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

        1. 显示相应单击标记的信息窗口。
        2. 相机平移到标记处。

        上面两行代码就可以实现:

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

        【讨论】:

        • 您忘记了出现的路线图标。您的解决方案对此不起作用。
        • 解决方案是什么?用于触发路线图标?
        【解决方案5】:

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

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

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

        【讨论】:

          【解决方案6】:

          我只是偶然发现了这一点,并没有得到答案的帮助。所以对于未来的读者来说——如果你要添加一个map.setOnMarkerClickListener(yourClickHandler),那么它就很简单了。

          yourClickHandler 中抽象逻辑并保留对所有标记的引用...即

          private val markers = arrayListOf<Marker>()
          

          无论您将标记添加到地图的哪个位置,也将它们添加到您的markers 数组中。 IE。像

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

          yourClickHandler 看起来像

          val yourClickHandler = GoogleMap.OnMarkerClickListener {
              markerClickHandler(marker = it)
              return@OnMarkerClickListener false
          }
          

          现在,只要您在地图上按下标记,yourClickHandler 就会调用markerClickHandler(),您在其中所做的任何事情都会发生。此外,当您不想以编程方式按下标记时,只需将该标记传递给 markerClickHandler

          【讨论】:

          • 我正在寻找这一行markers.add(map.addMarker(marker)) 谢谢=)
          【解决方案7】:

          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()
                  }
              }
          }
          
          

          【讨论】:

            猜你喜欢
            • 2011-02-13
            • 2014-01-28
            • 1970-01-01
            • 2013-06-14
            • 2011-04-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-05
            相关资源
            最近更新 更多