使用 GoogleMap 的带边界的 CameraPosition

CameraPosition with bounds using GoogleMap

我在使用 CameraPosition 时遇到了一些困难,因为我无法进行适当的缩放。 对我来说,适当的缩放是标记和我当前位置之间的距离。 但是,我设法使用 CameraUpdateFactory 获得了适当的缩放,但是我丢失了所有其他属性(方向(始终朝北)和鸟瞰图(45 度视图))。

我在这两者之间保持平衡(没有正确的缩放):

CameraPosition cameraPosition = new CameraPosition.Builder()
                        .target(current_location)
                        .zoom(mGoogleMap.getCameraPosition().zoom)
                        .bearing(location.getBearing())
                        .tilt(birdEyesAngle)
                        .build();

和这个(右缩放,但缺少其他属性):

CameraUpdateFactory.newLatLngBounds(bounds_between_two_markers, 10);

有什么方法既能正确缩放又能正确 orientation/bird-eye 吗?

希望你能帮上忙, 谢谢

试试这个:

首先使用newLatLngBounds方法获取CameraUpdate对象:

CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds_between_two_markers, 10);

我在 onMapReady() 方法中放入以下代码:

        LatLng pos = new LatLng(51.516667, 12.388889);
        LatLng pos1 = new LatLng(53.516667, 14.388889);

        MarkerOptions markerOptions = setUserMarker(pos);
        if(markerOptions != null) {
            markerOptions.title(campusLocationName);
            mMap.addMarker(markerOptions);
        }

        LatLngBounds.Builder b = new LatLngBounds.Builder();
        b.include(pos);
        b.include(pos1);

        CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(b.build(),  20);
        mMap.animateCamera(cu, 10, new GoogleMap.CancelableCallback() {
            @Override
            public void onFinish() {
                Log.e(TAG, "Start animate onFinish");
                CameraPosition cp = new CameraPosition.Builder()
                        .zoom(mMap.getCameraPosition().zoom)
                        .target(pos)
                        .tilt(45.0f)
                        .bearing(35.0f)
                        .build();
                mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cp));
//                mMap.moveCamera(CameraUpdateFactory.newCameraPosition(cp));
            }

            @Override
            public void onCancel() {
                Log.e(TAG, "Start animate onCancel");
            }
        });

我设备的结果:

使用 CancelableCallBack 你可以像以前一样改变相机位置,但是如果你不改变缩放系数,相机会保持旧的缩放系数,你只需设置 bearingtilt 随心所欲。