2013-05-27 19 views
1

我正在使用Google Maps API V2,我想知道是否有辦法區分用戶與地圖進行交互以移動或縮放相機,以及何時animateCamera方法被調用。谷歌地圖區分用戶移動和動畫

我想要做的就是讓用戶跟隨他們的地圖中心,直到他們放大或拖動地圖,此時我想讓用戶完全控制。

我的問題是onCameraChange在用戶移動地圖和地圖動畫時被調用。我能做些什麼來解決這個問題?

回答

3

從其他移動區分animateCamera,您可以在這裏評論使用代碼:http://code.google.com/p/gmaps-api-issues/issues/detail?id=4636#c21

如果使用在右上角的按鈕myLocation,這是不行的,因爲你不能區分按下它(當你要開始跟蹤用戶位置)從其他用戶的操作請參見:http://code.google.com/p/gmaps-api-issues/issues/detail?id=4789

爲了獲得最佳的用戶體驗爲3.1.36我建議您按照這樣的回答:Disable my-location when user moves the map and re-enable when he press the my-location button

+0

該代碼是正是我需要的,謝謝。 –

0

當你動畫的地圖,你通過在CancelableCallback從而可以檢測出是否

  • 動畫成功地完成(這意味着用戶不中斷動畫,提供給您沒叫)
  • 動畫被取消(animationCancelled)意味着用戶通過與地圖交互來中斷它)。

正如你所知道

  • 當動畫開始
  • 當動畫完成
  • 當動畫被用戶中斷

,你應該有足夠的狀態您的活動/片段中的信息可以決定用戶在進行動畫時與地圖進行交互。此時,您可以決定不再動畫地圖。 (避免後續調用animateCamera

0

谷歌地圖有一個很好的回調.OnCameraMoveStartedListener描述here

點是:

@Override 
public void onCameraMoveStarted(int reason) { 

    if (reason == OnCameraMoveStartedListener.REASON_GESTURE) { 
     Toast.makeText(this, "The user gestured on the map.", 
         Toast.LENGTH_SHORT).show(); 
    } else if (reason == OnCameraMoveStartedListener 
          .REASON_API_ANIMATION) { 
     Toast.makeText(this, "The user tapped something on the map.", 
         Toast.LENGTH_SHORT).show(); 
    } else if (reason == OnCameraMoveStartedListener 
          .REASON_DEVELOPER_ANIMATION) { 
     Toast.makeText(this, "The app moved the camera.", 
         Toast.LENGTH_SHORT).show(); 
    } 
}