2016-01-20 48 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 :)