Cómo cambiar la posición del botón Mi ubicación en Google Maps con Android Studio

Estoy trabajando en google maps, y necesito cambiar la posición de Mi ubicación (botón de ubicación actual). El botón de ubicación actual está en el lado superior derecho. Así que por favor ayúdame cómo volver a colocar el botón de ubicación actual en la pantalla de Google Maps. Gracias por adelantado.

Mi código de ejemplo:

final GoogleMap googleMap = mMapView.getMap(); googleMap.setMyLocationEnabled(true); 

Puedes usar esto

 View locationButton = ((View) mMapView.findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2")); 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); 

He resuelto este problema en mi fragmento de mapa mediante el posicionamiento de mi botón de ubicación a la esquina inferior derecha de la vista con el código a continuación, aquí está mi MapsActivity.java: –

 import android.support.v4.app.FragmentActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; View mapView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_map); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapView = mapFragment.getView(); mapFragment.getMapAsync(this); } /** * Manipulates the map once available. * This callback is triggered when the map is ready to be used. * This is where we can add markers or lines, add listeners or move the camera. In this case, * we just add a marker near Sydney, Australia. * If Google Play services is not installed on the device, the user will be prompted to install * it inside the SupportMapFragment. This method will only be triggered once the user has * installed Google Play services and returned to the app. */ @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; mMap.setMyLocationEnabled(true); // Add a marker in Sydney and move the camera LatLng sydney = new LatLng(-34, 151); mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); if (mapView != null && mapView.findViewById(Integer.parseInt("1")) != null) { // Get the button view View locationButton = ((View) mapView.findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2")); // and next place it, on bottom right (as Google Maps app) RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) locationButton.getLayoutParams(); // position on right bottom layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); layoutParams.setMargins(0, 0, 30, 30); } } } 

Y aquí está la distribución del fragmento: –

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.infogird.www.location_button_reposition.MapFragment"> <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> 

Espero que esto solucione su problema. Gracias.

Al establecer el relleno en GoogleMap Fragment puedes cambiar la posición de myLocationButton pero el único problema es que también cambiará las posiciones de otros botones como el zoom.

 SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); @Override public void onMapReady(GoogleMap map) { mMap = map; mMap.setPadding(left, top, right, bottom); } 

Usted puede utilizar debajo del código para todas las condiciones tales como: 1.If que usted quiere el botón de la localización de la demostración en derecho superior 2.If usted quiere el botón de la localización de la demostración en abajo-derecho 3.If que usted quiere el botón de la localización de la demostración en parte inferior izquierda

1.If que desea mostrar el botón de ubicación en la parte superior derecha

 View locationButton = ((View) mapView.findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2")); 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); 

2.If que desea mostrar el botón de ubicación en la parte inferior derecha

  View locationButton = ((View) mapView.findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2")); RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) locationButton.getLayoutParams(); // position on right bottom rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0); rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);rlp.setMargins(0,0,30,30); 

3.If usted quiere el botón de la localización de la demostración en parte inferior izquierda

  View locationButton = ((View) mapView.findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2")); RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) locationButton.getLayoutParams(); // position on right bottom rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); rlp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); rlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, 0); rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0); rlp.addRule(RelativeLayout.ALIGN_PARENT_END, 0); rlp.addRule(RelativeLayout.ALIGN_END, 0); rlp.addRule(RelativeLayout.ALIGN_PARENT_LEFT); rlp.setMargins(30, 0, 0, 40); 

La mejor de las suertes

Puedes hacer una cosa. Deshabilita el botón predeterminado "Mi ubicación" y crea un botón personalizado en la posición de tu deseo y con el clic de ese botón mueves la cámara a la latlng actual.

Por desgracia, sólo puede establecer el relleno, así:

 @Override public void onMapReady(GoogleMap googleMap) { googleMap.setPadding(left, top, right, bottom); ... } 

Terminé creando mi propio e incrustándolo en un diseño de trama usando layout_gravity para especificar dónde lo quiero, en este caso bottom / end:

 <FrameLayout android:layout_width="match_parent" android:layout_height="300dp"> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" .../> <ImageView android:id="@+id/myLocationCustomButton" android:layout_width="@dimen/custom_my_location_button_size" android:layout_height="@dimen/custom_my_location_button_size" android:layout_gravity="bottom|end" android:background="@drawable/disc" android:backgroundTint="@android:color/white" android:padding="@dimen/margin_smallest" android:src="@drawable/ic_my_location" ../> </FrameLayout> 

Luego, en la actividad, he inicializado y iniciado un google api cliente que puedo utilizar para buscar la ubicación actual cuando sea necesario por el botón durante un clic, ver el botón de clic escucha a continuación:

 @Override protected void onCreate(@Nullable Bundle savedInstanceState) { ... if (googleApiClient == null) { googleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); } myLocationButton = rootView.findViewById(R.id.myLocationCustomButton); } @Override protected void onStart() { googleApiClient.connect(); super.onStart(); } @Override protected void onStop() { googleApiClient.disconnect(); super.onStop(); } @Override public void onConnected(@Nullable Bundle bundle) { myLocationButton.performClick(); } @Override public void onConnectionSuspended(int i) { } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { } @Override public void onMapReady(final GoogleMap googleMap) { this.googleMap = googleMap; myLocationButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Location location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 16); MainActivity.this.googleMap.animateCamera(cameraUpdate, 250, null); } }); 

El build.gradle mi sub-módulo de build.gradle también tiene:

 ext { playServicesVersion = "8.4.0" } dependencies { ... compile "com.google.android.gms:play-services-location:${playServicesVersion}" ... } 

Espero que ayude.

Su trabajo muestra My Location Button Bottom Right Corner en MapView

XML

 <com.google.android.gms.maps.MapView android:id="@+id/mapView" android:layout_width="match_parent" android:layout_height="match_parent" /> 

JAVA

 private MapView mMapView; mMapView = (MapView) findViewById(R.id.mapView); mMapView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(final GoogleMap mMap) { if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { mMap.setMyLocationEnabled(true); } if (mMapView != null && mMapView.findViewById(Integer.parseInt("1")) != null) { View locationButton = ((View) mMapView.findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2")); RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) locationButton.getLayoutParams(); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); layoutParams.setMargins(0, 0, 20, 20); } } }); 
  • Obtener la ubicación seleccionada de la actividad de Google Maps
  • Api de Google Maps: muestra todos los caminos de un área específica
  • Parsing JSON de los mapas google DistanceMatrix api en android
  • La superposición de información de tráfico se muestra siempre encima de otras polilíneas en el mapa de google en android
  • Obtener 'Su entrada no es válida' al obtener una clave de API para Google Maps API v2
  • Los pines del mapa de la aplicación para Android no aparecen hasta que se toca la pantalla
  • Android Maps: No se pudo cargar el mapa. No se pudo contactar con los servidores de Google
  • No se encontró el recurso de servicio de Google Play
  • MoveCamera y animateCamera no funcionan la segunda vez
  • Google Maps API v2 invoca el comportamiento de hacer clic en mylocationbutton
  • El acoplamiento de los mapas de Google produce el marcador movido levemente cuando abierto con la aplicación nativa del iphone / androide
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.