Titanium:如何在点击所述标记时阻止谷歌地图自动平移到标记?

时间:2016-01-20 22:24:07

标签: android google-maps appcelerator appcelerator-titanium

我正在用Titanium(v5.0.4,sdk 5.1.2GA)编写一个跨平台的移动应用程序。该应用程序显示一个地图,其中包含靠近当前位置的兴趣点标记。如果用户将地图移动到新区域,则删除所有先前显示的标记,并根据新位置计算并显示一组新标记。用户可以单击标记,并显示infoWindow。单击infoWindow将打开一个新窗口以获取更多信息。

这适用于IOS(使用MapKit)。但是,在Android(使用Google地图)上,点击标记会显示infoWindow,但也会将地图置于标记的中心位置,从而触发'regionchanged'事件,这会导致我的应用移除标记并显示新的集合。基本上,用户永远不能单击infoWindow,也无法访问新窗口以获取更多信息。

我想做的事情:阻止Google地图点击时自动平移到标记。

或者,有没有办法区分点击标记后触发的'regionchanged'事件和用户移动地图触发的'regionchanged'事件?这样我就可以对后者做出反应。

我发现了这个(Impossible to prevent auto panning to a marker when clicking on it (google maps)),但这在轨道上是红宝石。我遇到的其他东西(无法找回链接)涉及重载“click”事件处理程序或使用disableAutoPan infoWindow选项(Google Maps: How to prevent InfoWindow from shifting the map),但这些都是针对Javascript API的。

那么,有人知道吗?

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题。虽然你提出这个问题需要很长时间,但我认为解决方案值得注意。

  1. 让地图视图回复clickregionchanged个事件
  2. <View id="mapView" module="ti.map" onClick="click" onRegionchanged="regionChanged" method="createView"> </View>

    1. 使用两个事件侦听器都可以访问的标志变量。
    2. var clicked = 0;

      1. click事件设置变量。
      2. var click = function(e) { clicked = 1; ... }

        1. 使用regionchanged包含_.defer(...)事件的功能。
        2. var regionChanged = function(e) { _.defer(function(){ ... (regionchanged code goes here) }); }

            如果设置了变量,则不应执行
          1. regionchanged代码。
          2. var regionChanged = function(e) { _.defer(function(){ if (clicked == 0) { ... (regionchanged code goes here) } }); }

            1. 取消设置regionchanged代码末尾的变量。
            2. var regionChanged = function(e) { _.defer(function(){ if (clicked == 0) { ... (regionchanged code goes here) } clicked = 0; }); }

              这里defer以某种方式确保何时触发两个事件(似乎)regionchanged事件发生在click事件之后。我认为情况可能并非总是如此,但我的测试并没有让我失望。

              我知道我可以使用布尔值来clicked:)