I can suggest 2 options.
However, I strongly advise you to use the first one - much more classic and simple:
- Use Map Padding (recommended)
You can re-position any of the GoogleMap Controls by setting the Padding
from the corners. In your case, I would set some padding from the top:
googleMap.setPadding(0, numTop, 0, 0); //numTop = padding of your choice
It would also change the center position of the Map Camera accordingly, which is great for that kind of use case (adding a title / other floating controls).
- Disable the button and create one of your own (less recommended)
Disabling it will be easy:
googleMap.getUiSettings().setMyLocationButtonEnabled(false)
However, creating a new one would be trickier - mostly because it is harder to set a fully-functional one.
- I would Create a
FloatingActionButton
that looks like the one on the Google Maps application (example).
- You can get the Icon from here (called "My Location")
- Color the Fab in Material Grey 300 (maybe 400, can't remember at the moment)
Define an onClick Event that would move the camera to the user's current location (you're going to have to use Location Service for this.
Sample:
//Acquire a reference to the system Location Manager
LocationManager locationManager =
(LocationManager)getSystemService(Context.LOCATION_SERVICE);
//Acquire the user's location
Location selfLocation = locationManager
.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
//Move the map to the user's location
LatLng selfLoc = new LatLng(selfLocation.getLatitude(), selfLocation.getLongitude());
CameraUpdate update = CameraUpdateFactory.newLatLngZoom(selfLoc, 15);
googleMap.moveCamera(update);
If you noticed, when you click the "My Location" button, it starts to track you and move the camera accordingly. In order to create that effect, you need to override googleMap.onCameraMove
and googleMap.onCameraIdle
, and code your app so whenever the camera is idle, the map will continue to follow the user, and whenever the user moved the camera, it will stop.
Sample for onCameraIdle
:
//Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
//Acquire the user's location
Location selfLocation = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
LatLng cameraLocation = googleMap.getCameraPosition().target;
float[] results = new float[3];
Location.distanceBetween(selfLocation.getLatitude(), selfLocation.getLongitude(), cameraLocation.latitude, cameraLocation.longitude, results);
if (results[0] < 30) //30 Meters, you can change that
googleMap.moveCamera(...) //Move the camera to user's location