GoogleMap会在缩放时更改相机位置

时间:2017-05-02 08:43:57

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

在我的应用中,我使用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);

看起来它一见钟情,但实际上在变焦和变形时,相机位置会在每次变焦动作时稍微改变。

我不知道该怎么做。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望在缩放手势后保留中心位置。使用手势缩放不会保持相同的中心,一旦手势变焦结束,您应该校正相机的位置。您可以在缩放后收听空闲事件,并将相机设置为初始中心位置。

代码段

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

希望这有帮助!