10

Ich entwickle eine einfache App, in der ich bereits Marker-Titel mit mrkr.showInfoWindow() angezeigt habe, aber ich möchte nicht, dass Benutzer diesen Marker erneut antippen. Wie deaktiviere ich das Klickereignis eines bestimmten Markers?Wie kann das Marker-Klick-Ereignis deaktiviert werden?

So habe ich es versucht.

Wie wird das Infofenster()/Titel meines Markers in meiner Anwendung angezeigt?

Antwort

13

können Sie einstellen, onMarkerClickListener in GoogleMap Objekt

map.setOnMarkerClickListener(new OnMarkerClickListener() { 
     @Override 
     public boolean onMarkerClick(Marker marker) { 
      return true; 
     } 
    }); 
+0

Wenn Sie das Market Click Event deaktivieren möchten, dann denke ich, das ist nicht die richtige Antwort. – Kedarnath

+1

hat es funktioniert. aber ich habe mehrere Marker. kann das Deaktivieren eines bestimmten Marker-Klicks möglich sein? – Aparichith

+0

http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.html doc sagt, dass die Methode true zurückgibt, wenn wir kein Standardverhalten wollen – Wishmaster

0

Sie onMarkerClickListener dafür verwenden können, wie unten,

mMap.setOnMarkerClickListener(new OnMarkerClickListener() 
{ 
    @Override 
    public boolean onMarkerClick (Marker marker) 
    { 
     // do nothing 
     return false; 
    } 
}); 
+1

Ich versuchte mit der Rückkehr wahr. es hat funktioniert. Aber ich habe mehrere marker.it deaktiviert alle anderen Marker click event .. Kann eine bestimmte Markierung deaktivieren ist möglich. – Aparichith

+0

'true' bedeutet, dass Sie dann klicken können, wie es möglich ist, dass das Klickereignis deaktiviert wird? – Kedarnath

+0

Ich fragte mich auch, aber es funktioniert. Es hat das Click-Ereignis aller Marker deaktiviert. – Aparichith

1

Es ist später von diesem Punkt 3 Jahren klar, dass es keine Möglichkeit gibt, Lassen Sie Marker-Klicks passieren, um von der Karte selbst (OnMapClickListener) verarbeitet zu werden. Markierungen fangen dieses Ereignis immer ab, obwohl Sie das Standardverhalten vom Klick aus deaktivieren können (wie die obige Antwort zeigt). Das Folgende wird veröffentlicht, falls es jemandem helfen kann, der noch eine bessere Lösung benötigt.

Um diese Einschränkung zu umgehen, gibt es zwei Möglichkeiten. Ich habe beides implementiert und kann den Code auf Anfrage aufräumen und teilen.

1.) Erstellen Sie ein GroundOverlay Bitmap, das die Wegpunkte enthält, die Sie nicht bearbeiten möchten. Mit dem Projection-Objekt von GoogleMap können Sie von Screen Points in LatLng konvertieren und berechnen, wo die Bitmap positioniert werden soll, damit die Wegpunkte an der richtigen Stelle angezeigt werden. Es ist ziemlich kompliziert, Rotation, Kartenauffüllung und ein paar andere Probleme zu behandeln. Wenn Sie heranzoomen, werden die Wegpunktmarkierungen größer und im Ereignis onCameraIdle erstellen Sie die Bitmap neu und positionieren das GroundOverlay bei Bedarf neu. Dies ist die Methode, die ich in der Produktion verwende. Schwenken, Drehen und Zoomen sind alle sehr sanft, und da Ground Overlays so eingestellt werden können, dass sie mit Taps umgehen oder nicht umgehen können, löst es das Problem. Ich konnte nicht herausfinden, wie man das mit Tilt machen kann. Die Wegpunkte selbst bleiben während der Rotation nicht nach Norden gerichtet, sondern können beim Neuaufbau des GroundOverlay nach oben gedreht werden. Es gibt eine kurze Pause/Nichtansprechbarkeit der Karte, nachdem die onCameraIdle die Neuanlage des Boden-Overlays verursacht hat.

2.) Erstellen Sie ein View-Objekt, das den gesamten Bildschirm abdeckt, und malt die Wegpunktmarkierungen in der onDraw-Methode der Ansicht. Verwenden Sie erneut das Projektionsobjekt von GoogleMap, um zu berechnen, wo die Markierungen erstellt werden sollen. Rufen Sie im OnCameraMove-Ereignis invalidate() auf, damit die Markierungen an ihren neuen Bildschirmpositionen neu gezeichnet werden. Der Hauptvorteil davon ist Einfachheit. Rotation, Tilt, Map Padding Offsets werden für Sie erledigt. Der Hauptnachteil ist, dass, wenn Sie bei jedem onCameraMove-Ereignis ungültig machen, es etwas zu CPU-intensiv ist (ich nehme an) und das Verschieben/Zoomen der Karte kann abgehackt werden. Wenn Sie alle 3 oder 5 Move-Ereignisse ungültig machen, scheinen die Wegpunkte beim Schwenken/Zoomen zu springen, da sie nicht oft genug an ihrer neuen Position neu gezeichnet werden. Es gibt jedoch keine Verzögerung am Ende der Kartenbewegung. Letztendlich, mit 100-200 Wegpunkten auf der Karte, waren die "while-panning" -Performance-Probleme für mich zu auffällig.

Ich hoffe, das hilft jemandem. Lassen Sie es mich wissen, wenn Sie Code Hilfe benötigen.

+0

Eine dritte Option besteht darin, Kartenberührungen mit einer enthaltenen ViewGroup abzufangen und verwenden Sie Projektion, um zu bestimmen, wo sich der Benutzer berührt hat. Es hängt alles davon ab, was Sie versuchen zu tun. Ich habe diese Antwort hier gefunden: http://stackoverflow.com/questions/14013002/google-maps-android-api-v2-detect-touch-on-map – JustinMorris