studio newlatlngzoom google example custom current animatecamera android google-maps google-maps-android-api-2

newlatlngzoom - set zoom google maps android



Android Maps Library V2 zoom controla la posiciĆ³n personalizada (5)

¿Cómo puedo personalizar la posición de los controles de zoom integrados en un GoogleMap V2?

Hay muchas preguntas relacionadas con este tema para la versión 1 de la biblioteca de Google Maps.

Colocación de controles de zoom en una vista de mapa

¿Cómo reposicionar los controles de zoom incorporados en MapView?

Cómo organizar el control de zoom con setBuiltInZoomControls (true)?

Sin embargo, no pude encontrar ninguna pregunta en relación con la V2 de la biblioteca.

En el V2, no hay método

(LinearLayout) mapView.getZoomControls();

todas las preguntas mencionadas anteriormente se vuelven obsoletas.

Gracias por adelantado


AFAIK, no hay forma de mover los controles de zoom estándar. Sin embargo, puedes ocultarlos y tener tus propios botones de zoom donde quieras, aunque luego serás responsable de ajustar el zoom del mapa en función de esos clics del botón.


Dependiendo de lo que intente hacer, puede encontrar útil GoogleMap.setPadding() (agregado en septiembre de 2013).

map.setPadding(leftPadding, topPadding, rightPadding, bottomPadding);

De los documentos API:

Este método le permite definir una región visible en el mapa, para indicarle al mapa que las partes del mapa alrededor de los bordes pueden oscurecerse, configurando el relleno en cada uno de los cuatro bordes del mapa. Las funciones del mapa se adaptarán al relleno. Por ejemplo, los controles del zoom, la brújula, los avisos de copyright y el logotipo de Google se moverán para caber dentro de la región definida, los movimientos de la cámara serán relativos al centro de la región visible, etc.

También vea la descripción de cómo funciona el relleno en GoogleMap .


Para que conste:

Los controles de navegación son 0x4

Entonces, en total:

@LayoutRes final int ZOOM_CONTROL_ID = 0x1; @LayoutRes final int MY_LOCATION_CONTROL_ID = 0x2; @LayoutRes final int NAVIGATION_CONTROL_ID = 0x4;


Sí, puede cambiar la posición de ZoomControl y el botón Mi ubicación con un pequeño hack. En mi ejemplo, tengo SupportMapFragment , que está inflado desde el diseño xml.

Ver identificadores para los botones ZoomControl y MyLocation:

ZoomControl id = 0x1 MyLocation button id = 0x2

Código para actualizar la posición de ZoomControl:

// Find map fragment SupportMapFragment mapFragment = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map); // Find ZoomControl view View zoomControls = mapFragment.getView().findViewById(0x1); if (zoomControls != null && zoomControls.getLayoutParams() instanceof RelativeLayout.LayoutParams) { // ZoomControl is inside of RelativeLayout RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) zoomControls.getLayoutParams(); // Align it to - parent top|left params.addRule(RelativeLayout.ALIGN_PARENT_TOP); params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); // Update margins, set to 10dp final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics()); params.setMargins(margin, margin, margin, margin); }


Yo uso MapFragment no SupportMapFragment:

import android.util.TypedValue;

en onCreate

// Find map fragment MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapview); int ZoomControl_id = 0x1; int MyLocation_button_id = 0x2; // Find ZoomControl view View zoomControls = mapFragment.getView().findViewById(ZoomControl_id); if (zoomControls != null && zoomControls.getLayoutParams() instanceof RelativeLayout.LayoutParams) { // ZoomControl is inside of RelativeLayout RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) zoomControls.getLayoutParams(); // Align it to - parent top|left params.addRule(RelativeLayout.ALIGN_PARENT_TOP); params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); // Update margins, set to 10dp final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics()); params.setMargins(margin, margin, margin, margin); }