我试图修复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;
答案 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上的覆盖方法来浏览代码