我对使用 CameraUpdateFactory.newLatLngBounds() 的 moveCamera 和 animateCamera 的准确性有一些疑问。我比较了一个 LatLngBounds 对象,我创建并作为参数发送到 moveCamera/animateCamera (CameraUpdateFactory.newLatLngBounds()),到 map.getProjection().getVisibleRegion().latLngBounds 在 onCameraChange() 事件甚至 GoogleMap.CancelableCallback#onFinish() . 它们与 不匹配。
有人遇到过这个问题吗?这是一个错误吗?
我的代码是:
final LatLngBounds boundingBox = MapUtils.getBoundingBox(mCurrLocation.getLatitude(), mCurrLocation.getLongitude(), mCurrRadius);
try {
if (animate) {
map.animateCamera(CameraUpdateFactory.newLatLngBounds(boundingBox, 0),
new GoogleMap.CancelableCallback() {
@Override
public void onFinish() {
if (!boundingBox.equals(map.getProjection().getVisibleRegion().latLngBounds)) {
map.moveCamera(CameraUpdateFactory.newLatLngBounds(boundingBox, 0));
}
}
@Override
public void onCancel() {
}
});
} else {
map.moveCamera(CameraUpdateFactory.newLatLngBounds(boundingBox, 0));
}
}
请忽略我在这里比较 2 个对象的方式(等于)。我还调试了代码并检查了 2 个对象,发现它们不匹配 -移动相机:
map.getProjection().getVisibleRegion().latLngBounds -
动画相机:
map.getProjection().getVisibleRegion().latLngBounds -
最佳答案
这似乎是 bug && !bug
的组合。
有关错误描述,请参阅:http://code.google.com/p/gmaps-api-issues/issues/detail?id=5353
基本上,您在小数点后第 5 位或第 6 位会有差异。
另一个问题是,当您将 LatLngBounds
发送到这些函数之一时,生成的 LatLngBounds
将是新的,完全适合屏幕,而您的原始代码将在其中。