Saltar al contenido

Cómo mover la posición de la brújula de la API de Google Maps de Android

Ya no necesitas investigar más por todo internet porque llegaste al espacio exacto, contamos con la solución que buscas y sin liarte.

Solución:

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


Sé que ha pasado mucho tiempo desde que se hizo la pregunta, pero me encontré con este problema hace unos días, arreglé el problema así:

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 puse la brújula en la esquina derecha. Debe asegurarse de que su mapFragment se cree cuando haga esto, le sugiero que ejecute su código en el método "onMapReady" de su MapFragment.

Te mostramos comentarios y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *