5

In the Google Maps API for Android there is button located at the top-right corner, served to locate you inside the map.

I would like to know if it is possible to relocate this icon that is by default in the API of Google Maps for Android, because at the top I plan to add an EditText as if it were floating.

enter image description here

Barak
  • 1,390
  • 15
  • 27
Isa M
  • 159
  • 1
  • 10

2 Answers2

9

I can suggest 2 options. However, I strongly advise you to use the first one - much more classic and simple:


  1. 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).


  1. 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.

  1. 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)
  2. 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);
    
  3. 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
    
Barak
  • 1,390
  • 15
  • 27
2
    View locationButton = ((View) findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2"));
    locationButton.setVisibility(View.GONE);
    RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) locationButton.getLayoutParams();
    // position on right bottom
    rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0);
    rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
    rlp.setMargins(0, 180, 180, 0);

You can set margin where you likely to locate the My location button.

Fahry Mohammed
  • 599
  • 5
  • 18