在我的应用中,我使用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);
看起来它一见钟情,但实际上在变焦和变形时,相机位置会在每次变焦动作时稍微改变。
我不知道该怎么做。
感谢您的帮助
答案 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
希望这有帮助!