2010-09-14 14 views
22

Ich kann nicht glauben, dass es keine einfache Möglichkeit gibt, solch eine grundlegende Sache wie diese zu machen ... Ich möchte ein Popup/Baloon (ein LinearLayout) zeigen, nachdem der Benutzer auf einen Kartenmarker klickt (etwas Ähnliches wie in der Google Maps App). Es sollte sich mit der Karte bewegen, wenn der Benutzer die Karte scrollt. Was ist der beste Weg, dies zu tun?Popup über Kartenmarkierung in MapView anzeigen

Eine Idee ist es, das LinearLayout im Root-Layout meiner Aktivität zu haben und es bei Bedarf anzuzeigen. Aber wie bringt man es mit der Karte in Bewegung?

Eine andere Möglichkeit, dies zu tun, könnte darin bestehen, ein Overlay zu erstellen, das das LinearLayout in onDraw zeichnet und dem Layout Berührungsereignisse gibt. Ist das möglich?

Antwort

45

Die Art, wie ich tat, ist:

die Markierungen an den erforderlichen GeoPoints Put ItemizedOverlay von Subklassen, wie in http://developer.android.com/guide/tutorials/views/hello-mapview.html

eine Pop-up-Ansicht von aus dem Layout erstellen beschrieben Aufpumpen:

View popUp = getLayoutInflater().inflate(R.layout.map_popup, map, false); 

Verwenden MapView.LayoutParams zum Positionieren des Popups in Bezug auf GeoPoint in der ItemizedOverlay-Methode < OverlayItem> :: onTap. Popup scrollt automatisch (ohne zusätzlichen Code), wenn der Benutzer die Karte scrollt. Grundsätzlich wird Popup an einen GeoPoint gebunden, wenn der Benutzer zoomt, wird die Position des Popups automatisch angepasst.

MapView map = (MapView) findViewById(R.id.mapview); 
MapView.LayoutParams mapParams = new MapView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
         ViewGroup.LayoutParams.WRAP_CONTENT, 
         <geopoint>, 
         <x offset if required>, 
         <y offset like pinHeight>, 
         MapView.LayoutParams.BOTTOM_CENTER); 
map.addView(popUp, mapParams); 
+0

passiert nichts, wenn ich die Popup-Ansicht hinzufüge. Es erscheint nicht? Ist dir das schon begegnet? –

+0

Ich habe es herausgefunden! Denken Sie daran, Kinder, immer einen anderen Blick in die Top-Viewgroup Ihrer PopUp-Ansicht! Weil diese Ansichtsgruppe (die Wurzel, in die Sie Inhalt einfügen müssen) die Layoutparams von den mapParams erhält. Vielleicht wird dieser Kommentar jemandem irgendwann helfen. –

+0

@ OneManMobile vielleicht würde dieser Kommentar mir helfen, wenn ich es verstanden hätte. Vielleicht könntest du mein [Problem] (http://stackoverflow.com/questions/13271458/add-legenda-to-osmdroid-mapview-with-pop-up) anschauen und mir sagen was genau eine andere Ansicht innerhalb der Topviewgroup von ist Ihre PopUp-Ansicht wäre? – birgit

12

Hier ist die "das fehlende Widget" ...

+0

Nicht die ideale Lösung (die ich benutze) ist, das Popup innerhalb des Stammes RelativeLayout über der Karte zu haben und seine Position zu ändern, wenn der Benutzer die Karte scrollt. Es ist nicht ideal, da sich das Popup nicht mit der Geschwindigkeit der Karte bewegt - es ist etwas hinter der Karte zurückgeblieben, wenn ich die Karte bewege. Wenn ich Zeit habe, werde ich versuchen, das Popup-Layout im benutzerdefinierten Overlay manuell zu zeichnen. – fhucho

+0

Ist das Kirans Lösung, die Sie verwenden? – OneWorld

+0

Ihre Lösung klingt wirklich wie eine Arbeit. Ich dachte auch daran, einen zweiten Marker direkt über dem ersten Marker zu erstellen. Aber je mehr ich darüber nachdenke, ich erkenne, dass es nicht wirklich gut ist, es so zu machen. Übrigens sprechen wir über das gleiche Problem hier: http://StackOverflow.com/Questions/3880623/How-to-show-a-balloon-above-a-marker-in-a-mapactivity-is-there -an-api-to-do-that Wir können unsere Fragen irgendwann verschmelzen – OneWorld

Verwandte Themen