2012-02-20 64 views
7

我在我的新Android項目上使用osmdroid(因爲我想能夠使用離線地圖),但我遇到很多困難來定製信息的外觀'n感覺將泡泡分配給覆蓋物品。使用osmdroid自定義信息氣泡重疊項目

現在,我正在使用一個ItemizedOverlayWithFocus疊加顯示我的項目;看着its code,我注意到整個事情都是在onDrawFinished方法中繪製的,所以我試圖創建自己的自定義覆蓋來重寫此方法,但這很難得到結果。我很想得到的東西就像這樣:

The result

你們是如何設法讓你的項目自定義信息泡沫?

我發現有幾個類爲Google的MapView實現這樣的事情(如Jeff Gilfelt's MapView Balloons),但沒有任何osmdroid。

+0

android-mapviewballoons應該使用幾乎相同的API。你沒有嘗試將其移植到osmdroid? – Macarse 2012-02-20 14:11:21

+0

我正在嘗試,但我正在調試(我沒有觸發事件觸發例如)。但是,由於我看到了不少看起來漂亮的信息泡泡的項目,我認爲我錯過了移植mapviewballoons更簡單的事情。 – Vivi 2012-02-20 14:50:19

回答

8

編輯:

  • 這個答案是最適合年長谷歌地圖的API。在谷歌地圖V2這 事情已經給出。

你可以從 https://github.com/galex/android-mapviewballoons

你可以從「BalloonItemizedOverlay.java」的方法選擇氣球的代碼如下

private void hideOtherBalloons(List<Overlay> overlays) { 
     for(int i=0; i<overlays.size();i++){ 
      if (overlays.get(i) instanceof BalloonItemizedOverlay<?> && overlays.get(i) != this) { 
       ((BalloonItemizedOverlay<?>) overlays.get(i)).hideBalloon(); 
      }else{ 
       BalloonOverlayView.SELECTED_BALLOON = i; 
       Log.i(i+" : Baloon Open", BalloonOverlayView.SELECTED_BALLOON+""); 
      } 
     } 
} 

設置,您可以使用setBalloonData數據BalloonOverlayView.java文件的方法如下:

protected void setBalloonData(Item item, ViewGroup parent) { 
     if (item.getTitle() != null) { 
      title.setVisibility(VISIBLE); 
      title.setText(item.getTitle()); 
     } else { 
      title.setText(""); 
      title.setVisibility(GONE); 
     } 
     if (item.getSnippet() != null) { 
      snippet.setVisibility(VISIBLE); 
      snippet.setText(item.getSnippet()); 
     } else { 
      snippet.setText(""); 
      snippet.setVisibility(GONE); 
     } 
} 
+0

該鏈接現在是404 ... – krzysztofkarolczak 2013-03-22 12:18:56

+0

你能否提供鏈接到源代碼? – TharakaNirmana 2013-06-04 14:49:54