android - usar - que significan los colores en google maps
Cómo mover la posición de la brújula de la API de Google Maps de Android (6)
En el mapa 2.0 api.
// change compass position
if (mapView != null &&
mapView.findViewById(Integer.parseInt("1")) != null) {
// Get the view
View locationCompass = ((View) mapView.findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("5"));
// and next place it, on bottom right (as Google Maps app)
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)
locationCompass.getLayoutParams();
// position on right bottom
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
layoutParams.setMargins(0, 160,30, 0); // 160 la truc y , 30 la truc x
}
¿Alguien sabe si puedes cambiar la posición de la brújula dentro del mapa?
Todo lo que puedo encontrar es cómo habilitarlo o deshabilitarlo . Pero necesito moverlo hacia abajo un poco para que mi superposición no lo obstruya.
Las soluciones basadas en relleno funcionan para compensaciones pequeñas, pero que yo sepa, no hay API expuesta que nos permita cambiar la "gravedad" horizontal de la brújula de izquierda a derecha, como lo hace la aplicación de Google Maps:
Tenga en cuenta que si aplicó una gran cantidad de relleno izquierdo para mover la brújula a la derecha en su propia aplicación, el logotipo de Google en la parte inferior izquierda también se desplazará hacia la derecha.
Sé que ha pasado mucho tiempo desde que se hizo la pregunta, pero me encontré con este problema hace unos días que solucioné el problema de esta manera:
try {
assert mapFragment.getView() != null;
final ViewGroup parent = (ViewGroup) mapFragment.getView().findViewWithTag("GoogleMapMyLocationButton").getParent();
parent.post(new Runnable() {
@Override
public void run() {
try {
for (int i = 0, n = parent.getChildCount(); i < n; i++) {
View view = parent.getChildAt(i);
RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) view.getLayoutParams();
// position on right bottom
rlp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 0);
rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP,0);
rlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
rlp.rightMargin = rlp.leftMargin;
rlp.bottomMargin = 25;
view.requestLayout();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
En este ejemplo pongo la brújula en la esquina derecha. Debe asegurarse de que su mapFragment se crea cuando haga esto, le sugiero que ejecute su código en el método "onMapReady" de su MapFragment.
Sé que no puedes cambiar la posición de la brújula, pero puedes desactivarla y construir la tuya privada.
Utilice el método GoogleMap.setPadding ():
https://developers.google.com/maps/documentation/android/map#map_padding
@Override
public void onMapReady(GoogleMap map) {
try {
final ViewGroup parent = (ViewGroup) mMapView.findViewWithTag("GoogleMapMyLocationButton").getParent();
parent.post(new Runnable() {
@Override
public void run() {
try {
Resources r = getResources();
//convert our dp margin into pixels
int marginPixels = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, r.getDisplayMetrics());
// Get the map compass view
View mapCompass = parent.getChildAt(4);
// create layoutParams, giving it our wanted width and height(important, by default the width is "match parent")
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(mapCompass.getHeight(),mapCompass.getHeight());
// position on top right
rlp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 0);
rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
rlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 0);
//give compass margin
rlp.setMargins(marginPixels, marginPixels, marginPixels, marginPixels);
mapCompass.setLayoutParams(rlp);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}