2015-12-18 70 views
0

我正試圖解決谷歌地圖中的聽衆問題。在谷歌地圖中被遞歸調用的聽衆呼叫

onCameraChange每次地圖變化時都會調用。

似乎攝像頭並未立即使用moveCamera進行更新,因此當它開始逐漸更改時,它會再次調用監聽器。

如果不是完全固定的,它會調用監聽recursively-,最終地圖開始口吃來回,終於崩潰(可能是因爲所有的遞歸。)

我怎樣才能防止聽衆被調用直到地圖完全變化,或者我該如何立即改變地圖,而不是逐漸改變?

我使用來檢查它是否出界的值是:

VisibleRegion vr = mMap.getProjection().getVisibleRegion(); 

double left = vr.latLngBounds.southwest.longitude; 
double top = vr.latLngBounds.northeast.latitude; 
double right = vr.latLngBounds.northeast.longitude; 
double bottom = vr.latLngBounds.southwest.latitude; 

回答

0

onCameraChange應該被稱爲相機正在做動畫或移動後。

不幸的是,事實並非如此,因爲我能夠看到調試。

把一個布爾值(讓我們稱之爲cameraMoving) - 並將它放在你的偵聽器方法的活動中,默認爲false。

Listener onCameraChange(CameraPosition position){ 
    if (!cameraMoving){ 
     //code 
    } 
} 

當您開始進行呼叫時,將相機移動到true以防止遞歸操作和崩潰。

map.animateCamera(update) 
cameraMoving = true; 

如果你還好用GoogleMap.animateCamera代替moveCamera - 你可以設置一個標誌,跟蹤,如果攝像機移動的,並覆蓋GoogleMap.CancelableCallback方法。

@Override 
    public void onFinish() { 
     cameraMoving = false; 
    } 

    @Override 
    public void onCancel() { 
     //Code Here 
    } 

然後,當監聽器被再次調用它只會通過代碼動畫已經完成它調用覆蓋方法後onFinish和onCancel

讀到它在這裏:Google Cancellable Callback

相關問題