Comment puis-je modifier le bouton par défaut de mon emplacement sur Google map?
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);
}
});
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
Avec une simple astuce, vous pouvez remplacer le bouton mon emplacement par un autre 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();
}
}
});
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.