2010-09-14 20 views
22

No puedo creer que no haya una manera sencilla de hacer una cosa tan básica como esta ... Quiero mostrar un popup/globo (un LinearLayout) después de que el usuario haga clic en un marcador del mapa (algo similar a lo que está en la aplicación Google Maps). Debería moverse con el mapa, cuando el usuario se desplaza por el mapa. ¿Cuál es la mejor manera de hacer esto?Mostrar el marcador emergente del mapa en MapView

Una idea es tener el LinearLayout en el diseño de raíz de mi actividad y mostrarlo cuando sea necesario. ¿Pero cómo hacer que se mueva con el mapa?

Otra forma de hacerlo puede ser crear una Superposición que dibuje LinearLayout en onDraw y proporcione los eventos táctiles de diseño. es posible?

Respuesta

45

La forma en que lo hice es:

puso a los marcadores en geopuntos requeridos por la subclasificación ItemizedOverlay, como se describe en http://developer.android.com/guide/tutorials/views/hello-mapview.html

Crear una ventana emergente Ver inflando de la disposición:

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

Uso MapView.LayoutParams para colocar la ventana emergente con respecto a GeoPoint en el método ItemizedOverlay < OverlayItem> :: onTap. Popup se desplazará automáticamente (sin ningún código adicional) cuando el usuario se desplace por el mapa. Básicamente emergente se ata a un GeoPoint, si el usuario se acerca, la posición de ventana emergente se ajusta automáticamente.

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

no sucede nada cuando agrego la vista emergente. No aparece? ¿Has encontrado esto? –

+0

¡Lo descubrí! Recuerde niños, ¡siempre coloque otra vista dentro del grupo de vista superior de su ventana emergente! Debido a que ese grupo de vistas (el de la raíz en el que debe colocar el contenido) obtendrá los formatos de los mapasparámetros. Tal vez este comentario ayudará a alguien algún día. –

+0

@OneManMobile quizás este comentario me ayude si lo entendiera. Tal vez podrías mirar mi [problema] (http://stackoverflow.com/questions/13271458/add-legenda-to-osmdroid-mapview-with-pop-up) y decirme exactamente qué otra vista dentro del grupo de vista superior de ¿tu ventana emergente sería? – birgit

12

Aquí es la "falta el widget" ...

+0

La solución no ideal (que estoy usando) es tener la ventana emergente dentro de la RelativeLayout raíz sobre el mapa y cambiar su posición cuando el usuario se desplaza por el mapa. No es ideal, porque la ventana emergente no se mueve a la misma velocidad que el mapa, está un poco retrasada en el mapa, cuando muevo el mapa. Cuando tenga tiempo, intentaré dibujar manualmente el diseño emergente en superposición personalizada. – fhucho

+0

¿Está utilizando la solución de Kiran? – OneWorld

+0

Su solución realmente suena como una solución alternativa. También pensé en crear un marcador secundario justo encima del primer marcador. Pero cuanto más lo pienso, reconozco que no es realmente bueno hacerlo de esa manera. Por cierto, estamos hablando del mismo problema aquí: http://stackoverflow.com/questions/3880623/how-to-show-a-balloon-above-a-marker-in-a-mapactivity-is-here -an-api-to-do-that Podemos fusionar nuestras preguntas en algún momento – OneWorld

Cuestiones relacionadas