Comment puis-je personnaliser la position des commandes de zoom intégrées dans un GoogleMap V2?
Il y a beaucoup de questions liées à ce sujet pour la version 1 de la bibliothèque Google Maps.
Placement des commandes de zoom dans une MapView
Comment repositionner les commandes de zoom intégrées dans MapView?
Comment mettre en forme le contrôle du zoom avec setBuiltInZoomControls (true)?
Cependant, je n'ai pas pu trouver de questions concernant la V2 de la bibliothèque.
Dans le V2, il n'y a pas de méthode
(LinearLayout) mapView.getZoomControls();
toutes les questions mentionnées précédemment deviennent obsolètes.
Merci d'avance
Selon ce que vous essayez de faire, vous pourriez trouver GoogleMap.setPadding () utile (ajouté en septembre 2013).
map.setPadding(leftPadding, topPadding, rightPadding, bottomPadding);
Depuis les documents de l'API:
Cette méthode vous permet de définir une région visible sur la carte, pour signaler à la carte que des parties de la carte autour des bords peuvent être obscurcies, en définissant un remplissage sur chacun des quatre bords de la carte. Les fonctions de la carte seront adaptées au rembourrage. Par exemple, les commandes de zoom, la boussole, les mentions de copyright et le logo Google seront déplacés pour s'adapter à l'intérieur de la région définie, les mouvements de la caméra seront relatifs au centre de la région visible, etc.
Voir également description du fonctionnement du remplissage dans GoogleMap .
Oui, vous pouvez changer la position du bouton ZoomControl et MyLocation avec un petit hack. Dans mon exemple, j'ai SupportMapFragment, qui est gonflé à partir de la disposition xml.
Afficher les identifiants des boutons ZoomControl et MyLocation:
ZoomControl id = 0x1
MyLocation button id = 0x2
Code pour mettre à jour la position 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);
}
Juste pour info:
Les commandes de navigation sont 0x4
Donc au total:
@LayoutRes final int ZOOM_CONTROL_ID = 0x1;
@LayoutRes final int MY_LOCATION_CONTROL_ID = 0x2;
@LayoutRes final int NAVIGATION_CONTROL_ID = 0x4;
J'utilise MapFragment et non SupportMapFragment:
import Android.util.TypedValue;
dans 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);
}