Réglage d'un longClickListener sur un marqueur de carte

longClickListsner t-il un moyen de définir longClickListsner sur un marqueur sur google maps v2? Je souhaite que l'utilisateur appuie longuement sur le marqueur et affiche un dialogue avec des options pour supprimer ou afficher des informations. Est-ce possible?

  • Comment jouer à la vidéo en tant que fond d'écran live android?
  • Obtenir l'adresse mac locale Bluetooth dans Marshmallow
  • Erreur d'E / S lors de l'utilisation du courrier, de l'activation et des fichiers jar supplémentaires dans stdio Android
  • Survolez une image (sur toile) sur une vidéo-vision?
  • Comment puis-je me connecter à un réseau Wi-Fi spécifique dans Android par programme?
  • Exécution d'un émulateur Android sur ordinateur avec processeur AMD
  • 7 Solutions collect form web for “Réglage d'un longClickListener sur un marqueur de carte”

    J'ai une autre proposition.

    Tout d'abord, je crée le marqueur:

     mapa.addMarker(new MarkerOptions() ... .setDraggable(true); 

    Après que vous pouvez faire de l'auditeur setOnMarkerDragListener comme ceci:

     mapa.setOnMarkerDragListener(new OnMarkerDragListener() { @Override public void onMarkerDragStart(Marker marker) { // TODO Auto-generated method stub //Here your code } @Override public void onMarkerDragEnd(Marker marker) { // TODO Auto-generated method stub } @Override public void onMarkerDrag(Marker marker) { // TODO Auto-generated method stub } }); 

    Et puis vous pouvez remplacer ce que vous voulez (normalement onMarkerDragStart pour simuler un long clic)

    J'espère que cela aide

    La classe Marqueur n'a pas LongClickListener. Bien que cette approche soit loin d'être parfaite, voici une idée de ce que vous pouvez faire.

    Définissez un écouteur à long clic pour votre objet GoogleMap. Sur un long clic, vérifiez si la position cliquée est assez proche de l'un de vos marqueurs. Pour décider de ce seuil de proximité, vous pouvez utiliser le niveau de zoom de la carte.

    Voici le code d'exemple pas si bon. Je ne l'ai pas essayé, mais cela peut convenir à vos besoins.

      map.setOnMapLongClickListener(new OnMapLongClickListener() { @Override public void onMapLongClick(LatLng latLng) { for(Marker marker : yourMarkerList) { if(Math.abs(marker.getPosition().latitude - latLng.latitude) < 0.05 && Math.abs(marker.getPosition().longitude - latLng.longitude) < 0.05) { Toast.makeText(MapActivity.this, "got clicked", Toast.LENGTH_SHORT).show(); //do some stuff break; } } } }); 

    Comme l'a recommandé ARP, vous pouvez utiliser OnMarkerDragListener pour simuler le long clic. Dans mon cas, je crée de nouveaux marqueurs lorsque le onMapLongClick () s'est produit, alors je voulais faire quelque chose de similaire (mais pas égal) que le

     @Override public void onMarkerDragStart(Marker marker) { marker.remove(); MarkerOptions options = createBasedOnMarker(marker); this.googleMap.addMarker(options); } 

    De cette façon, vous supprimez le marqueur précédemment dans la carte et créez un autre dans la même position, avec le même contenu (vous devez disposer d'une carte ou d'une paire pour garder les informations des marqueurs que vous créez).

    J'espère que ma solution de contournement vous aidera.

    La réponse ARP est bien, mais elle souffre d'un effet laid: le marqueur se déplace lorsque vous commencez à traîner et lorsque vous avez fini, le marqueur est toujours dans une position supérieure à celle que vous pointez sur votre doigt.

    Jetez un oeil à http://www.youtube.com/watch?v=RxAHHJD4nU8

    La réponse d'akaya n'est pas une mauvaise approche, mais si vous avez la bibliothèque com.google.maps.android:android-maps-utils:03+ incluse avec votre projet, vous pouvez être exact sur la distance:

     double distance = SphericalUtil.computeDistanceBetween( marker.getPosition(), latLng ); if( distance < 50 ) { // closer than 50 meters? //..do stuff.. } 

    Juste au cas où quelqu'un en aurait besoin, j'ai ajusté une fonction logarithmique pour calculer le seuil de proximité @akaya mentionné, qui fonctionne bien pour les zooms entre 5.0 et 18. Voici la fonction:

     float zoom = mMap.getCameraPosition().zoom; double maxDistance = 2000000 * Math.exp(-0.644*zoom); 

    Hé Regardez ce code. Je viens d'arrêter le marqueur d'être déplacé et onMarkerDragStart utilisé la détection de clic long de onMarkerDragStart .

     public abstract class LinkMarkerLongClickListener implements GoogleMap.OnMarkerDragListener { private int previousIndex = -1; private Marker cachedMarker = null; private LatLng cachedDefaultPostion = null; private List<Marker> markerList; private List<LatLng> defaultPostions; public LinkMarkerLongClickListener(List<Marker> markerList){ this.markerList = new ArrayList<>(markerList); defaultPostions = new ArrayList<>(markerList.size()); for (Marker marker : markerList) { defaultPostions.add(marker.getPosition()); marker.setDraggable(true); } } public abstract void onLongClickListener(Marker marker); @Override public void onMarkerDragStart(Marker marker) { onLongClickListener(marker); setDefaultPostion(markerList.indexOf(marker)); } @Override public void onMarkerDrag(Marker marker) { setDefaultPostion(markerList.indexOf(marker)); } @Override public void onMarkerDragEnd(Marker marker) { setDefaultPostion(markerList.indexOf(marker)); } private void setDefaultPostion(int markerIndex) { if(previousIndex == -1 || previousIndex != markerIndex){ cachedMarker = markerList.get(markerIndex); cachedDefaultPostion = defaultPostions.get(markerIndex); previousIndex = markerIndex; } cachedMarker.setPosition(cachedDefaultPostion); } } 

    Vous pouvez appeler l'auditeur comme ça!

     map.setOnMarkerDragListener(new LinkMarkerLongClickListener(markers) { @Override public void onLongClickListener(Marker marker) { ToastUtils.showToast(Mission1Activity.this, marker.getTitle()); } }); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.