varios studio marcadores icono google example custom cambiar agregar android google-maps-android-api-2 android-maps-v2 android-maps

studio - Google map para android mi ubicación botón personalizado



google maps android studio 2018 (4)

Con un simple truco, puede reemplazar el botón Mi ubicación con uno personalizado.

  1. Personaliza el diseño de tu nuevo botón.
  2. Establecer mi ubicación habilitada en mapas api.
  3. Ocultar el botón predeterminado de mi ubicación.
  4. Haga clic en el método de clic de mi ubicación en su botón personalizado.

1. Personaliza el diseño de tu nuevo botón.

agregue un nuevo botón a su ubicación deseada en el archivo de diseño de la actividad del mapa.

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_height="match_parent" android:layout_width="match_parent"> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".activities.MapsActivity" /> <ImageView android:id="@+id/ic_location" android:layout_width="18dp" android:layout_height="18dp" android:src="@drawable/ic_location" android:layout_marginRight="8dp" android:layout_marginBottom="18dp" android:layout_alignParentRight="true" android:layout_alignParentBottom="true"/> </RelativeLayout>

2. Establecer mi ubicación habilitada en mapas api

@Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; // Enable My Location mMap.setMyLocationEnabled(true); /* and DON''T disable the default location button*/ }

3. Ocultar el botón predeterminado de mi ubicación.

//Create field for map button. private View locationButton; @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; mMap.setMyLocationEnabled(true); // get your maps fragment SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); // Extract My Location View from maps fragment locationButton = mapFragment.getView().findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2")); // Change the visibility of my location button if(locationButton != null) locationButton.setVisibility(View.GONE); }

4. Llame al método de clic de mi ubicación en su botón personalizado.

findViewById(R.id.ic_location).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(mMap != null) { if(locationButton != null) locationButton.callOnClick(); } } });

¿Cómo puedo cambiar google map mi botón predeterminado de ubicación? Configuré mi ubicación habilitar y dibujar el mapa de la imagen estándar para encontrar la ubicación, ¿es posible cambiar la imagen predeterminada?


Esto podría ser útil para alguien que está buscando cambiar el ícono de ubicación directamente, en lugar de usar cualquier truco o solución alternativa:

locationButton = (mapView.findViewById<View>(Integer.parseInt("1")).parent as View) .findViewById<ImageView>(Integer.parseInt("2")) locationButton.setImageResource(R.drawable.ic_location_current)`

Aquí findViewById<ImageView> es lo que hay que hacer.


Si desea conservar la suavidad del botón predeterminado Mi ubicación pero no la apariencia, llame a las siguientes líneas:

//Make sure you have explicit permission/catch SecurityException mMap.setMyLocationEnabled(true); mMap.getUiSettings().setMyLocationButtonEnabled(false);

Ahora puede iniciar y detener las actualizaciones de ubicación manteniendo el comportamiento predeterminado


Ver abajo el archivo xml para personalizar el botón:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <fragment android:id="@+id/maps" android:name="pl.mg6.android.maps.extensions.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="5dp" > <ImageView android:id="@+id/imgMyLocation" android:layout_width="40dp" android:layout_height="40dp" android:scaleType="fitXY" android:src="@drawable/track_my_location" /> </LinearLayout> </RelativeLayout>

Luego, en la clase java, declara el botón de ubicación:

private ImageView imgMyLocation; imgMyLocation = (ImageView) findViewById(R.id.imgMyLocation);

Haga clic en Evento:

imgMyLocation.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { getMyLocation(); }

Obtenga el método de ubicación, en el que simplemente pase su latitud y longitud actuales.

private void getMyLocation() { LatLng latLng = new LatLng(Double.parseDouble(getLatitude()), Double.parseDouble(getLongitude())); CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 18); googleMap.animateCamera(cameraUpdate); } });