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.
Wenn Sie das Market Click Event deaktivieren möchten, dann denke ich, das ist nicht die richtige Antwort. – Kedarnath
hat es funktioniert. aber ich habe mehrere Marker. kann das Deaktivieren eines bestimmten Marker-Klicks möglich sein? – Aparichith
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