2010-09-14 9 views
22

我不能相信有沒有簡單的方法來做這樣的基本事情...我想在用戶點擊地圖標記後顯示一個彈出/氣球(LinearLayout)與Google地圖應用中的內容相似)。當用戶滾動地圖時,它應該隨地圖一起移動。做這個的最好方式是什麼?在MapView中顯示彈出式地圖標記

一個想法是將LinearLayout放在我的Activity的根佈局中,並在需要時顯示它。但如何使它隨地圖一起移動?

另一種方法可能是創建一個Overlay,它在onDraw中繪製LinearLayout並提供佈局觸摸事件。這可能嗎?

回答

45

我做的方法是:

通過繼承ItemizedOverlay把標記在需要GeoPoints,通過從佈局膨脹的http://developer.android.com/guide/tutorials/views/hello-mapview.html

描述的創建一個彈出瀏覽:

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

使用MapView.LayoutParams將彈出窗口定位到ItemizedOverlay < OverlayItem> :: onTap方法中的GeoPoint。當用戶滾動地圖時,彈出窗口會自動滾動(沒有任何附加代碼)。基本上彈出窗口綁定到GeoPoint,如果用戶放大,彈出窗口的位置會自動調整。

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

當我添加彈出視圖時沒有任何反應。它沒有出現?你有沒有遇到過這個? – 2012-10-28 22:47:26

+0

想通了!記住孩子們,總是在彈出視圖的頂部視圖組中放置另一個視圖!因爲該視圖組(根目錄 - 你需要放入內容)將從mapParams獲取佈局窗體。也許這個評論有一天會幫助別人。 – 2012-10-29 18:10:40

+0

@OneManMobile也許這個評論會幫助我,如果我明白了。也許你可以看看我的[問題](http://stackoverflow.com/questions/13271458/add-legenda-to-osmdroid-mapview-with-pop-up)並告訴我什麼是頂部視圖組中的另一個視圖你的popUp-view會是? – birgit 2012-11-07 21:47:51

12

這裏是 「缺少的部件」 ...

+0

不理想的解決方案(我正在使用)是在地圖上方的根RelativeLayout中顯示彈出窗口,並在用戶滾動地圖時更改其位置。這並不理想,因爲彈出窗口並未以與地圖相同的速度移動 - 當我移動地圖時,它滯後地圖一點。當我有時間時,我會嘗試在自定義疊加層中手動繪製彈出式佈局。 – fhucho 2010-10-07 14:21:17

+0

您正在使用Kiran的解決方案嗎? – OneWorld 2010-10-07 16:29:29

+0

您的解決方案聽起來就像一個工作。我也想到在第一個標記上方創建一個輔助標記。但我越想到它,我就認識到這樣做並不是很好。順便說一下,我們在這裏討論相同的問題:http://stackoverflow.com/questions/3880623/how-to-show-a-balloon-above-a-marker-in-a-mapactivity-is-there -an-api-to-do-that我們可以合併我們的問題一些時間 – OneWorld 2010-10-07 17:11:34