android cartes: Comment Long Cliquez sur une Carte?
Comment puis-je clic long sur une mapview de sorte qu'un marqueur de lieu apparaît à ce point sur la carte?
J'ai essayé plusieurs méthodes sans succès:
1) à l'Aide de setOnLongClickListener
sur le MapvView
qui n'a jamais détecté la longclicks.
2), Mon autre idée était d'étendre MapView
pour remplacer dispatchTouchEvent
.. Créer un GestureDetector pour répondre à appuyez de manière prolongée sur le rappel. Mais j'ai été coincé à mi-chemin ici, comme je ne pouvais pas obtenir une poignée de mes sous-classé Mapview. c'est à dire
MyMapview mymapview; //MyMapView extends MapView
//results in a classcast exception
mymapView = (MyMapView) findViewById(R.id.map);
3) La seule autre façon, je sais comment c'est:
Détecter un MotionEvent.ACTION_DOWN
et après un retard de l'exécutable à un gestionnaire, et de détecter appuyez de manière prolongée si les deux autres événements: acton_move ou un action_up, ne se sont pas produites.
Quelqu'un peut-il fournir des réflexions sur l'une de ces méthodes pour détecter des pressions longues?
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une façon encore plus facile. Juste faire une superposition comme la première superposition dans la liste qui n'a pas de dessiner quoi que ce soit et de les utiliser pour reconnaître les gestes à l'aide de la GestureDetector. Il doit alors retourner vrai si il a traité les cas de sorte qu'il ne se propage.
Et voici la classe:
Meilleur moyen que je connaisse pour ce faire est d'utiliser l'open source mapview-overlay-manager et l'utilisation de son geste auditeur qui fournit un rappel pour
Il y a une mise en œuvre pour le traitement à long appuyez sur les cartes ici:
http://www.kind-kristiansen.no/2011/android-handling-longpresslongclick-on-map-revisited/
Cela fonctionne avec votre MapActivity et vous permettra de:
secondes est bon pour moi).
à jamais si légèrement déplacer sur l'écran, comme ils sont maintenant une pression longue.
Cette solution est basée sur Roger Kristiansen la solution. J'ai ajouté des points x et y de détection, de sorte que le défilement n'est pas considéré comme un travail de la presse. Cette solution n'est pas aussi élégant que Roger est parce que je utiliser de variables de classe et de mettre le code dans mon MapActivity au lieu de l'étendre à MapView et la création d'un auditeur comme il l'a fait. Mais si vous voulez coller avec son code, mais ont mieux non-support multi-touch, il suffit de prendre x et y du point des choses de la mine et de l'ajouter à son.
Variables de classe en haut de mon MapActivity:
Ajouter cette fonction dans votre MapActivity:
Ce mapview-overlay-gestionnaire de bibliothèque est super. La raison onLongPress est déclenchée lorsque "défilement" est parce que la bibliothèque ne pas prendre en compte le multitouch. Vous pouvez contourner ce problème en rejetant onLongPress si il n'y a plus d'un pointeur impliqués comme:
ambrose,
J'ai modifié la démo de la bibliothèque mapview-overlay-manager. pour obtenir ce code en cours d'exécution avec un double tap geste:
Espère que cela aide.
J'ai aussi eu une ClassCastException quand j'ai essayé d'utiliser MyMapView. Comme solution, j'ai créé un MyMapView objet au lieu d'une MapView objet et par programme de l'ajouter à la mise en page, et qui a très bien fonctionné.
Si vous allez avec le retard de post/message à un gestionnaire (une solution que j'utilise moi-même), il peut être utile de tester si la carte a été déplacé, c'est à dire si
mapView.getMapCenter()
,mapView.getLatitudeSpan()
etmapView.getLongitudeSpan()
retour le même que lorsque le pointeur est allé vers le bas.