簡體   English   中英

在Google地圖中遞歸調用偵聽器調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM