Reputation: 4733
I'm displaying current location in map using that code:
GoogleMap googleMap;
public static Location mLocation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_maps);
SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
googleMap = fm.getMap();
googleMap.setMyLocationEnabled(true);
LocationManager locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);
googleMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
@Override
public void onMyLocationChange(Location location) {
mLocation = location;
displayCurrentLocation();
}
});
}
public void displayCurrentLocation() {
CameraPosition cameraPosition = new CameraPosition.Builder().
target(new LatLng(mLocation.getLatitude(), mLocation.getLongitude())).
zoom(15).
bearing(0).
build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}
}
If I'll zoom in after few second zoom level returns to it's starter position. I know it's because of zoom(15) in my listener but is there any possibility to don't do that? If use will zoom in and will start walking I don't want to lose my zoom level
Upvotes: 0
Views: 762
Reputation: 1083
Create a String data member in class
String loadLocation="notDone"
in onMyLocationChange
mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
@Override
public void onMyLocationChange(Location location) {
mLocation = location;
if(loadLocation.equals("notDone")){
displayCurrentLocation();
}
}
});
in displayCurrentLocation method
public void displayCurrentLocation(){
CameraPosition cameraPosition = new CameraPosition.Builder().
target(new LatLng(mLocation.getLatitude(), mLocation.getLongitude())).
tilt(60).
zoom(15).
bearing(0).
build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
loadLocation="done";
}
now this method displayCurrentLocation() call only 1 time, when map screen will open. try this.
Upvotes: 2
Reputation: 967
public void displayCurrentLocation() {
float zoom = map.getCameraPosition().zoom;
CameraPosition cameraPosition = new CameraPosition.Builder().
target(new LatLng(mLocation.getLatitude(), mLocation.getLongitude())).
zoom(zoom ).
bearing(0).
build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}
Upvotes: 1