web-dev-qa-db-fra.com

Bouton personnalisé Google map pour Android mon emplacement

Comment puis-je modifier le bouton par défaut de mon emplacement sur Google map?

19
Nininea

Voir ci-dessous le fichier xml au bouton personnalisé: 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical" >

    <fragment
        Android:id="@+id/maps"
        Android:name="pl.mg6.Android.maps.extensions.SupportMapFragment"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent" />

    <LinearLayout
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginLeft="10dp"
        Android:layout_marginRight="10dp"
        Android:layout_marginTop="5dp" >

        <ImageView
            Android:id="@+id/imgMyLocation"
            Android:layout_width="40dp"
            Android:layout_height="40dp"
            Android:scaleType="fitXY"
            Android:src="@drawable/track_my_location" />
    </LinearLayout>

</RelativeLayout>

Puis en classe Java, déclarez le bouton d'emplacement:

private ImageView imgMyLocation;
        imgMyLocation = (ImageView) findViewById(R.id.imgMyLocation);

Cliquez sur l'événement:

imgMyLocation.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                getMyLocation();

}

Obtenir la méthode de localisation, il suffit de passer vos latitude et longitude actuelles.

private void getMyLocation() {
        LatLng latLng = new LatLng(Double.parseDouble(getLatitude()), Double.parseDouble(getLongitude()));
        CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 18);
        googleMap.animateCamera(cameraUpdate);
    }
    });
29
Pratik Dasa

Si vous souhaitez conserver la finesse du bouton Ma position par défaut mais pas l'apparence, appelez les lignes suivantes:

//Make sure you have explicit permission/catch SecurityException
mMap.setMyLocationEnabled(true);
mMap.getUiSettings().setMyLocationButtonEnabled(false);

Maintenant, vous pouvez démarrer et arrêter les mises à jour d'emplacement tout en conservant le comportement par défaut

7
Zach

Avec une simple astuce, vous pouvez remplacer le bouton mon emplacement par un autre personnalisé. 

  1. Personnalisez la disposition de votre nouveau bouton. 
  2. Définir ma position activée dans les cartes api. 
  3. Masquer le bouton par défaut de ma position. 
  4. appeler la méthode de clic de mon emplacement sur votre clic de bouton personnalisé.

1. Personnalisez la disposition de votre nouveau bouton

ajoutez un nouveau bouton à l'emplacement de votre choix dans le fichier de mise en forme de l'activité de la carte.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
     xmlns:map="http://schemas.Android.com/apk/res-auto"
     xmlns:app="http://schemas.Android.com/apk/res-auto"
     xmlns:tools="http://schemas.Android.com/tools"
     Android:layout_height="match_parent"
     Android:layout_width="match_parent">

    <fragment
         Android:id="@+id/map"
         Android:name="com.google.Android.gms.maps.SupportMapFragment"
         Android:layout_width="match_parent"
         Android:layout_height="match_parent"
         tools:context=".activities.MapsActivity" />

   <ImageView
        Android:id="@+id/ic_location"
        Android:layout_width="18dp"
        Android:layout_height="18dp"
        Android:src="@drawable/ic_location"
        Android:layout_marginRight="8dp"
        Android:layout_marginBottom="18dp"
        Android:layout_alignParentRight="true"
        Android:layout_alignParentBottom="true"/>
</RelativeLayout>

2. Définir ma position activée dans les cartes api

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    // Enable My Location
    mMap.setMyLocationEnabled(true);
    /* and DON'T disable the default location button*/
 }

3. Masquer le bouton par défaut de ma position.

    //Create field for map button.
    private View locationButton;

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        mMap.setMyLocationEnabled(true);

        // get your maps fragment
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
        // Extract My Location View from maps fragment 
        locationButton = mapFragment.getView().findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2"));
        // Change the visibility of my location button
        if(locationButton != null)
            locationButton.setVisibility(View.GONE);
    }

4. appelez la méthode de clic de mon emplacement sur votre clic de bouton personnalisé.

findViewById(R.id.ic_location).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(mMap != null)
            {
                if(locationButton != null)
                    locationButton.callOnClick();

            }
         }
    });
4
Ali009

Cela peut être utile à quelqu'un qui souhaite changer directement l'icône de lieu, au lieu d'utiliser une astuce ou une solution de contournement:

locationButton = (mapView.findViewById<View>(Integer.parseInt("1")).parent as View)
    .findViewById<ImageView>(Integer.parseInt("2"))

locationButton.setImageResource(R.drawable.ic_location_current)`

Ici, findViewById<ImageView> est la bonne chose à faire.

0
Abhijeet Hallur