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);
}