在谷歌地图中递归调用侦听器调用

时间:2015-12-18 19:49:50

标签: android google-maps recursion listener coordinates

我试图修复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;

1 个答案:

答案 0 :(得分: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