web-dev-qa-db-fra.com

Android Maps Library V2 zoom contrôle la position personnalisée

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

27
Robert Estivill

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 .

38
Mark Doliner

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

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;
0
Langusten Gustel

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