Gibt es eine Möglichkeit, eine longClickListsner
auf einem Marker auf Google Maps v2 zu setzen? Ich möchte den Benutzer lange auf den Marker drücken und eine Dialog-Show mit Optionen zum Löschen oder Anzeigen von Informationen haben. Kann das gemacht werden?Einstellen eines LongClickListener auf einer Karte Marker
Antwort
Markerklasse verfügt nicht über LongClickListener. Obwohl dieser Ansatz bei weitem nicht perfekt ist, ist hier eine Vorstellung davon, was Sie tun können.
Legen Sie einen Lang-Klick-Listener für Ihr GoogleMap-Objekt fest. Prüfen Sie bei einem langen Klick, ob die Position, auf die geklickt wurde, nah genug an einem Ihrer Marker ist. Um diese Annäherungsschwelle festzulegen, können Sie die Zoomstufe der Karte verwenden.
Hier ist der nicht so gute Beispielcode. Ich habe es nicht versucht, aber es kann Ihren Bedürfnissen entsprechen.
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;
}
}
}
});
Ich habe einen anderen Vorschlag.
Zuerst stelle ich die Marker ziehbar:
mapa.addMarker(new MarkerOptions() ...
.setDraggable(true);
Nachdem Sie einen Zuhörer setOnMarkerDragListener wie diese machen kann:
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
}
});
Und dann können Sie außer Kraft setzen, dass Sie möchten (in der Regel onMarkerDragStart eine lange zu simulieren klick)
Hoffe es hilft
Ausgezeichnet! :))) – whiteLT
Ich habe das versucht, aber mein Marker ändert die Position nur am Tippen. Ich habe nicht begonnen, es zu ziehen, klopfe einfach darauf und es hat sich geändert. Ich möchte das nicht tun. Kannst du mir einen anderen Weg vorschlagen? –
Ich denke, weil der Marker in dem Punkt zentriert ist, den Sie berührt haben. Ich weiß nicht, ob es dafür eine Lösung gibt, sorry. – ARP
ARP Die Antwort ist in Ordnung, aber es hat einen hässlichen Effekt: Der Marker verschiebt sich, wenn Sie anfangen zu ziehen und wenn Sie fertig sind, ist der Marker immer noch höher als Sie mit dem Finger zeigen.
Werfen Sie einen Blick auf http://www.youtube.com/watch?v=RxAHHJD4nU8
Als ARP vorgeschlagen, können Sie die OnMarkerDragListener den langen Klick simulieren können. In meinem Fall bin die Schaffung ich neuen Markers, wenn der onMapLongClick() aufgetreten ist, also wollte ich etwas ähnliches (aber nicht gleich), dass die
@Override
public void onMarkerDragStart(Marker marker) {
marker.remove();
MarkerOptions options = createBasedOnMarker(marker);
this.googleMap.addMarker(options);
}
diese Art und Weise tun, werden Sie die Markierung entfernen, die zuvor innerhalb dem war map and create an der gleichen Position, mit dem gleichen Inhalt (Sie müssen eine Karte oder ein Paar haben, um die Informationen von den Markierungen, die Sie erstellen, zu behalten).
Hope meine Abhilfe hilft.
akaya's answer ist kein schlechter Ansatz, aber wenn man die com.google.maps.android:android-maps-utils:0.3+library included mit Ihrem Projekt haben Sie können über die Entfernung genau sein:
double distance = SphericalUtil.computeDistanceBetween(
marker.getPosition(),
latLng
);
if(distance < 50) { // closer than 50 meters?
//..do stuff..
}
Es ist schlechte Ansatz, müssen Sie auch Karte Zoomstufe –
Zoom-Independent respektieren. http://googlemaps.github.io/android-maps-utils/javadoc/com/google/maps/android/SphericalUtil.html#computeDistanceBetween-LatLng-LatLng- – flowtron
Nur falls jemand es brauchen kann, habe ich eine logarithmische Funktion eingestellt, um die Nähe Schwelle zu berechnen @akaya genannt, die für zoomt zwischen 5,0 und 18. Hier funktioniert gut ist die Funktion:
float zoom = mMap.getCameraPosition().zoom;
double maxDistance = 2000000 * Math.exp(-0.644*zoom);
Hey, schau dir diesen Code an Ich habe gerade den Marker gestoppt, als er gezogen wurde, und habe die's long click detection benutzt.
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);
}
}
Sie können den Hörer so nennen!
map.setOnMarkerDragListener(new LinkMarkerLongClickListener(markers) {
@Override
public void onLongClickListener(Marker marker) {
ToastUtils.showToast(Mission1Activity.this, marker.getTitle());
}
});
- 1. Wie auf einem anderen Marker in Marker-Liste Verwendung spezifischer Marker zeigen einstellen Angular Google Maps
- 2. Marker auf Karte Broschüre für glänzend
- 3. Android Google Karte Marker
- 4. Verschiedene benannte Marker auf Google Android Karte
- 5. Zentrieren einer Google-Karte basierend auf Marker lat lange Werte
- 6. Android LongClickListener auf ExpandableListView Gruppenartikel
- 7. ClickListener AND LongClickListener auf ListFragment
- 8. Google Karte gestylt Karte Marker nicht angezeigt
- 9. Programmgesteuert auf Marker und Karte klicken
- 10. LeafletJS Handle Marker auf kontinuierliche Karte
- 11. Zeige einen beweglichen Marker auf der Karte
- 12. Android benutzerdefinierte Karte Marker Grenzen
- 13. Hinzufügen eines Klickereignisses zu einer Google-Karte
- 14. Einstellen eines Timers auf Benutzerinteraktion
- 15. anzeigen Regionen auf einer Karte
- 16. Google map Javascript Marker setPosition() manchmal verschwindet Marker und erscheint auf jedem Mausereignis auf der Karte
- 17. BlackBerry LongClickListener Implementierung
- 18. setAnimation funktioniert nicht in LongClickListener
- 19. Load Marker auf Google-Karte von JSON php
- 20. Erneutes Löschen mehrerer Google Maps-Marker ohne Repaint auf Karte
- 21. Karte auf
- 22. Marker wird nicht auf der Karte angezeigt angularjs
- 23. So löschen Sie einen Marker auf Google Karte
- 24. Drupal gmap: Setze Marker nach Stadt, nicht auf Karte
- 25. Karte mit Marker auf der AMP-HTML-Seite einbinden
- 26. Deaktivieren Sie klicken Sie auf Marker in eingebetteten Google Karte
- 27. Android - google map - wie zeigen mehrere Marker auf der Karte?
- 28. GPS oder Triangulation beim Einstellen der Benutzerposition auf der Karte?
- 29. automatisch die Karte zoomen, um alle Marker
- 30. Previous marker remove in Google Karte
Das wäre ein Weg sein, aber es ist nicht narrensicher, weil Sie einen Marker auswählen könnten Sie nicht wollen, und Sie werden nicht wissen, bis Sie es @tyczj Ja löschen – tyczj
, es Beweis nicht übel ist. Selbst wenn der Marker einen Listener hätte, wären Fehlschläge aufgetreten, wenn sie zu nahe beieinander liegen. Imo, die Suche nach dem nächsten Marker bringt keine zusätzlichen Probleme. Misclicks treten trotzdem auf, Sie müssen lediglich den Benutzer die Operation bestätigen lassen. – akaya