Hello,Views(三)GoogleMap地圖使用下篇(附源碼)

來源:互聯網
上載者:User
前言

本文是官方教程的中文翻譯,講的是Google地圖的使用,續接上篇。(下載源碼)

 

第二部分:添加Overlay Items

 

現在,你已經有了一張地圖,但是在許多情況下,你需要建立自己的地表徵圖記和圖層。那麼接下來我們就來完善這個功能。要達到我們的目的,我們要繼承ItemizedOverlay 類,它可以提供給我們所需的 Overlay集合(Overlay是覆蓋的意思,本人覺得可以翻譯為“圖層”)。

 

1.窗建一個java類命名為HelloItemizedOverlay 並且繼承ItemizedOverlay類,為了便於觀察和結構的清晰,此處,我建立了一個java檔案,把該類放到到裡面。

 

2.為該類聲明成員變數,首先是一個OverlayItem ArrayList,我們的圖層元素就是放到這裡面的。

private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

3.現在重寫構造器,調父類構造器傳入Drawable 參數時,先用boundCenterBottom()方法綁定一下,如果沒有把圖片綁定的話,是沒有效果的,也就是不能在地圖上正確顯示該塗層。

public HelloItemizedOverlay(Drawable defaultMarker) 
{
super(boundCenterBottom(defaultMarker));
}

4.In orde如果要把圖層添加到集合中還要定義addOverlay()方法:

public void addOverlay(OverlayItem overlay) 
{
mOverlays.add(overlay);
populate();
}

需要提醒的是,每次執行該函數的時候,最後都要調用populate() 方法,這個方法會讀取集合中的每一個元素,為繪製到螢幕做準備。

 

5.當執行了populate()方法時,它會調用createItem(int)方法來正式建立每個 圖層元素:

@Override
protected OverlayItem createItem(int i)
{
return mOverlays.get(i);
}

6.同樣重寫size() ,返回當前集合中圖層元素個數:

@Override
public int size()
{
return mOverlays.size();
}

7.我們再寫一個構造器,這個很關鍵,這一步的話,原教程貌似是有問題的,本人經實踐發現此處也應該在調父類構造器時將Drawable參數用boundCenterBottom綁定,另外就是獲得內容相關的引用:

public HelloItemizedOverlay(Drawable defaultMarker, Context context) 
{
super(boundCenterBottom(defaultMarker));
mContext = context;
}

8.現在T重寫onTap()回調方法,他負責處理使用者點擊圖層元素的事件:

@Override
protected boolean onTap(int index)
{
OverlayItem item = mOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
return true;
}

從代碼中可以看出,它的效果就是,當單擊地圖上我們添加的表徵圖時,彈出一個對話方塊,告訴我們你單擊的對象的相關資訊。

至此,我們已經完成對HelloItemizedOverlay 的編寫,可以回到HelloGoogleMaps 去調用他了。

9.首先需要一張用於圖層顯示的圖片,把它放在項目的res/drawable/檔案夾下面

10.在OnCreate()方法末尾繼續添加代碼:

List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker);
HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable);

11.所有的圖層元素在地圖裡面都由MapView來承載,因此如果你想添加一些圖層元素,那麼就要通過 getOverlays()來獲得一個list列表,然後為他們指定圖片,這些在HelloItemizedOverlay 中我們已經處理好了。

 

12.現在建立一個地理位置的座標點 GeoPoin,用於指定第一個圖層元素的擺放位置,然後把它傳給新的OverlayItem:

GeoPoint point = new GeoPoint(19240000,-99120000);
OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");

GeoPoint 的參數使用微度為單位(degrees * 1e6). OverlayItem 的構造器接受的參數有GeoPoint 座標,標題,內容摘要。

 

13.最後我們就可以把OverlayItem 添加到HelloItemizedOverlay 執行個體中的集合了,再把執行個體添加到地圖:

itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);

14.運行程式,正常的話可以看到如下效果:

當你單擊表徵圖時,會彈出對話方塊。(下載源碼)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.