Comment détecter un clic sur une polyligne

S'il y a une polyligne sur googlemap et qu'un clic est effectué sur la carte, comment puis-je vérifier si ce clic était sur polyligne ou ailleurs?

Polyline line = googleMap.addPolyline(new PolylineOptions() .add(new LatLng(51.2, 0.1), new LatLng(51.7, 0.3)) .width(5) .color(Color.RED)); googleMap.setOnMapLongClickListener(new OnMapLongClickListener() { } }); 

  • Accélération du système de coordonnées de l'appareil en système de coordonnées absolues
  • Vue en bâche au bas du fragment d'une disposition de coordinateur interne
  • L'application Android of obfuscate à l'aide de proguard continue de masquer les pots de bibliothèque - ou est-ce?
  • ListView dans un ScrollView
  • Comment retirer une Snackbar en utilisant son propre bouton Action?
  • 9 Image de patch où le centre est 1: 1
  • L'erreur getGoogleAppId a échoué avec l'état: 10 Android KitKat - GCM et Google Drive
  • La force de l'application se ferme lorsque Google + n'est pas installé
  • Débogage avec Android Studio collé à "Waiting For Debugger" pour toujours
  • Est-il possible de vérifier la batterie externe avec le SDK d'Android?
  • Eclipse Android - Logcat Clearing too Fast
  • OnActivityResult () non appelé lorsque l'activité a commencé à partir de Fragment
  • 3 Solutions collect form web for “Comment détecter un clic sur une polyligne”

    Malheureusement, il n'y a pas d'écouteur de clic de polyligne, donc vous devrez écouter des clics sur la carte et vérifier si un clic a été enregistré sur l'une de vos polylignes. Vous devrez également sauvegarder les références aux polylignes que vous avez ajoutées à votre carte.

    Voici un exemple qui calcule s'il y a une polyligne ~ à 100 mètres du clic.

     mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { @Override public void onMapClick(LatLng clickCoords) { for (PolylineOptions polyline : mPolylines) { for (LatLng polyCoords : polyline.getPoints()) { float[] results = new float[1]; Location.distanceBetween(clickCoords.latitude, clickCoords.longitude, polyCoords.latitude, polyCoords.longitude, results); if (results[0] < 100) { // If distance is less than 100 meters, this is your polyline Log.e(TAG, "Found @ "+clickCoords.latitude+" "+clickCoords.longitude); } } } } }); 

    Une fois qu'une polyligne est trouvée, vous pouvez économiser cette distance en tant que float minDistance; Puis faites passer d'autres polylignes pour vérifier s'il y en a plus près.

    Pour rendre cela plus précis, vous pouvez obtenir le niveau de zoom à chaque touche et multipliez votre distance requise. Comme 100 * (22 - mMap.getCameraPosition().zoom) (vous devez utiliser une distance plus grande aux niveaux de zoom inférieurs).

    Bonne chance!

    L'API Google Maps la plus récente comprend désormais l'auditeur de clics des polylignes. Vous devez utiliser 8.4+. Dans le fichier gradle:

     compile 'com.google.android.gms:play-services-maps:8.4.0 

    Configurer l'utilisateur de polyligne de la carte:

     googleMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener() { @Override public void onPolylineClick(Polyline polyline) { //do something with polyline } }); 

    Polyline doit être cliquable pour que l'auditeur fonctionne.

     PolylineOptions line = new PolylineOptions(); //add path points, set colour, etc. here Polyline polyline = googleMap.addPolyline(line); polyline.setClickable(true); 

    La solution ci-dessus ne fonctionne pas correctement. Surtout si nous avons une grande distance entre deux points de polyligne.

    J'ai répondu à cette question: Polylines Clickable Google Maps API Android

    Nous pouvons modifier le code ci-dessus comme ceci:

     mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { @Override public void onMapClick(LatLng clickCoords) { for (PolylineOptions polyline : mPolylines) { if (PolyUtil.isLocationOnPath(clickCoords, polyline.getPoints(), true, 100)) { // user clicked on polyline } } } }); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.