[英]Listener call being called recursively in google maps
我正在嘗試解決Google地圖中的監聽器問題。
每次地圖更改時,都會調用onCameraChange。
似乎相機沒有立即使用moveCamera進行更新,因此當它開始逐步更改時,它將再次調用偵聽器。
如果未完全修復,它將以遞歸方式調用偵聽器-最終,地圖開始來回停頓並最終崩潰(可能是由於所有遞歸)。
如何防止在完全更改地圖之前調用偵聽器,或者如何立即更改地圖而不是逐漸更改地圖?
我用來檢查是否超出范圍的值是:
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;
應該在對照相機進行動畫或移動后調用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
}
然后,當再次調用偵聽器時,它將僅在動畫完成后通過調用Override方法onFinish和onCancel來遍歷代碼。
在此處閱讀有關內容: Google可取消的回調
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.