【问题标题】:GoogleMap change the camera position on zoomGoogleMap 在缩放时更改相机位置
【发布时间】:2017-05-02 08:43:56
【问题描述】:

在我的应用中,我使用 GoogleMap (play-services-maps:10.2.1)。我已将地图的位置固定在特定位置,并且我不希望我的用户能够移动地图。我只希望他能够放大它。

这是我尝试过的:

// Set position
LatLng requestedPosition = new LatLng(lat, lon);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(requestedPosition, zoom));
// Disable all Ui interaction except for zoom
map.getUiSettings().setAllGesturesEnabled(false);
map.getUiSettings().setZoomGesturesEnabled(true);

乍一看它似乎可以工作,但实际上在缩放和取消缩放时,相机位置在每次缩放移动时都会发生一些变化。

我不知道该怎么办。

感谢您的帮助

【问题讨论】:

    标签: android google-maps google-maps-android-api-2


    【解决方案1】:

    如果我理解正确,您希望在缩放手势后保留中心位置。手势缩放不会保持相同的中心,一旦手势缩放结束,您应该纠正相机的位置。您可以在缩放后监听空闲事件并将相机动画到初始中心位置。

    代码 sn-p

    public class MapsActivity extends FragmentActivity implements OnMapReadyCallback,
     GoogleMap.OnCameraIdleListener {
    
        private GoogleMap map;
        private LatLng requestedPosition;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_maps);
            // Obtain the SupportMapFragment and get notified when the map is ready to be used.
            SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
            mapFragment.getMapAsync(this);
        }
    
        @Override
        public void onMapReady(GoogleMap googleMap) {
            map = googleMap;
    
            // Add a marker in Sydney and move the camera
            requestedPosition = new LatLng(41.385692,2.163953);
            float zoom = 16.0f;
            map.addMarker(new MarkerOptions().position(requestedPosition).title("Marker in Barcelona"));
    
            map.moveCamera(CameraUpdateFactory.newLatLngZoom(requestedPosition, zoom));
    
            //map.moveCamera(CameraUpdateFactory.newLatLngZoom(requestedPosition, zoom));
            // Disable all Ui interaction except for zoom
            map.getUiSettings().setAllGesturesEnabled(false);
            map.getUiSettings().setZoomGesturesEnabled(true);
            map.setOnCameraIdleListener(this);
        }
    
        @Override
        public void onCameraIdle() {
            float zoom = map.getCameraPosition().zoom;
            map.animateCamera(CameraUpdateFactory.newLatLngZoom(requestedPosition, zoom));
        }
    }
    

    我把这个示例放在 Github https://github.com/xomena-so/so43733628

    希望这会有所帮助!

    【讨论】:

    • 谢谢,我认为它应该可以工作。与此同时,我找到了另一个解决方案:map.getUiSettings().setAllGesturesEnabled(false); map.getUiSettings().setZoomControlsEnabled(true);禁用触摸缩放,仅启用不改变指向位置的缩放菜单
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    相关资源
    最近更新 更多