我对使用 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 将是新的,完全适合屏幕,而您的原始代码将在其中。

10-08 13:56