2016-01-20 59 views
1

我正在用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的。

那么,有人有任何想法?

回答

0

我最近有同样的问题。虽然你问这个问题已经很长时间了,但我认为这里的解决方案值得注意。

  1. 使地图视图响应两者clickregionchanged事件

<View id="mapView" module="ti.map" onClick="click" onRegionchanged="regionChanged" method="createView"> </View>

  • 使用一个标志变量,这两个事件侦听器访问。
  • var clicked = 0;

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

  • regionchanged事件与_.defer(...)功能。
  • var regionChanged = function(e) { _.defer(function(){ ... (regionchanged code goes here) }); }

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

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

    这里defer某种程度上可以确保当两个事件被触发(好像)regionchanged事件自带的Click事件之后。我认为这可能并非总是如此,但我的测试并没有让我失望。

    而且我知道我可以使用布尔值作为clicked :)