2010-09-14 6 views
22

Je ne peux pas croire qu'il n'y a pas de moyen facile de faire une telle chose de base ... Je veux montrer un popup/baloon (un LinearLayout) après que l'utilisateur clique sur un marqueur de carte (quelque chose de smilar à ce qui est dans l'application Google Maps). Il devrait se déplacer avec la carte, lorsque l'utilisateur fait défiler la carte. Quelle est la meilleure façon de procéder?Afficher la popup au-dessus de la carte dans MapView

Une idée est d'avoir LinearLayout dans la disposition racine de mon activité et de l'afficher en cas de besoin. Mais comment le faire bouger avec la carte?

Une autre méthode consiste à créer une superposition qui dessine LinearLayout dans onDraw et donne les événements tactiles de disposition. Est-ce possible?

Répondre

45

La façon dont je l'ai fait est:

Mettez les marqueurs à géopoints requis par le sous-classement ItemizedOverlay, comme décrit dans http://developer.android.com/guide/tutorials/views/hello-mapview.html

Création d'une vue popup en gonflant de la mise en page:

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

Utilisation MapView.LayoutParams pour positionner le popup par rapport à GeoPoint dans la méthode OverlayItem> :: onTap de ItemizedOverlay <. Popup défilera automatiquement (sans code supplémentaire) lorsque l'utilisateur fait défiler la carte. Fondamentalement popup est lié à un GeoPoint, si l'utilisateur effectue un zoom, la position du popup est ajustée automatiquement.

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

Rien ne se passe lorsque j'ajoute l'affichage contextuel. Cela n'apparaît pas? Avez-vous rencontré cela? –

+0

Compris! Souvenez-vous des enfants, placez toujours une autre vue dans le groupe de vue supérieur de votre vue pop-up! Parce que ce viewgroup (le root-un dont vous avez besoin pour mettre du contenu) recevra les layoutparams de mapParams. Peut-être que ce commentaire aidera quelqu'un un jour. –

+0

@OneManMobile peut-être que ce commentaire m'aiderait si je le comprenais. Peut-être que vous pourriez regarder mon [problème] (http://stackoverflow.com/questions/13271458/add-legenda-to-osmdroid-mapview-with-pop-up) et dites-moi ce que exactement une autre vue dans le viewgroup supérieur de votre vue pop-up serait? – birgit

12

Voici le "Widget manquant" ...

+0

La solution non idéale (que j'utilise) est d'avoir la popup à l'intérieur de la racine RelativeLayout au-dessus de la carte et de changer sa position lorsque l'utilisateur fait défiler la carte. Ce n'est pas idéal, parce que la fenêtre ne bouge pas à la même vitesse que la carte - elle est un peu en retard sur la carte, lorsque je déplace la carte. Quand j'ai le temps je vais essayer de dessiner manuellement la mise en page contextuelle en superposition personnalisée. – fhucho

+0

Est-ce que vous utilisez la solution de Kiran? – OneWorld

+0

Votre solution sonne vraiment comme un travail. J'ai aussi pensé à créer un marqueur secondaire juste au-dessus du premier marqueur. Mais plus j'y pense, je reconnais que ce n'est pas vraiment bon de le faire de cette façon. Soit dit en passant, nous parlons du même problème ici: http://stackoverflow.com/questions/3880623/how-to-show-a-balloon-above-a-marker-in-a-mapactivity-is-there -a-api-to-do-that Nous pouvons fusionner nos questions un certain temps – OneWorld

Questions connexes