【正文】
ur other widgets. However, you do need to have these two items: ? android:apiKey, which in production will need to be a Google Maps API key ? android:clickable=true, if you want users to be able to click and pan through your map For example, from the Maps/NooYawk sample application, here is the main layout: ?xml version= encoding=utf8? RelativeLayout xmlns:android= android:layout_width=fill_parent android:layout_height=fill_parent android:id=+id/map android:layout_width= fill_parent android:layout_height=fill_parent android:apiKey=YOUR_ API_KEY android:clickable=true / /RelativeLayout 3 We39。t have 268,435,456 pixels in either dimension, the user sees a small map focused on one tiny corner of the globe. A level of 16 will show several city blocks in each dimension, which is probably a reasonable starting point for experimentation. If you wish to allow users to change the zoom level, call setBuiltInZoomControls (true)。 return(true)。} Layers upon Layers If you have ever used the fullsize edition of Google Maps, you are probably used to seeing things overlaid atop the map itself, such as pushpins indicating businesses near the location being searched. In map parlance (and, for that matter, in many serious graphic editors), the pushpins are on a layer separate from than the map itself, and what you are seeing is the position of the pushpin layer atop the map layer. Android39。 6 ().add(new SitesOverlay(marker))。 =marker。 (new OverlayItem(getPoint(,), The Downtown Club, Original home of the Heisman Trophy))。 boundCenterBottom(marker)。 } } Handling Screen Taps An Overlay subclass can also implement onTap(), to be notified when the user taps the map, so the overlay can adjust what it draws. For example, in fullsize Google Maps, clicking a pushpin pops up a bubble with information about the business at that pin39。 ().add(me)。 ()。 大多數(shù)的安卓設(shè)備,都整合了谷歌地圖,這并不奇怪。 幸運(yùn)的是,把基本顯示功能納入你的 安卓 項(xiàng)目是相當(dāng)容易的。 如果你正在考慮使用谷歌地圖,請(qǐng)嚴(yán)密地審查這些條款來確定你的使用目的是否將無法運(yùn)行、是否與其它各個(gè)條款相抵觸。相反,它是谷歌應(yīng)用程序界面 的加載項(xiàng),是普通 SDK 的延伸部分。例如,在寫這篇文章的時(shí)候,人們所用的愛可視5的安卓系統(tǒng)并沒有谷歌地圖。 基本要素 最簡(jiǎn)單的方式得到一張地圖,為您的應(yīng)用程序創(chuàng)建自己的類 MapActivity 的子類。這是必要的,因?yàn)镸apView 類是不在 包中。 例如,從地圖 / NooYawk的示例應(yīng)用程序,這里是主要的布局: ?xml version= encoding=utf8f39。如果你是閑來無事做,就新建該項(xiàng)目,并把它在模擬器中運(yùn)行起來,你就會(huì)得到一個(gè)漂亮的世界地圖。然而,當(dāng)他們查看整個(gè)世界的地圖時(shí),這不是十分的有用。在 MapView 類MapController 之間,你有與之相持平的能力來決定地圖展示什么以及怎樣展示它。 你可以直接通過 setZoom()方法對(duì) MapController 控制縮放的級(jí)別。 16水平將顯示幾個(gè)街區(qū)的城市在每一個(gè)層面,這可能是一個(gè)合理的起點(diǎn)實(shí)驗(yàn)。 將 GeoPoint 作為 setCenter()方法的參數(shù) 。然而,這就意味著你必須記住由 le6乘以現(xiàn)實(shí)世界的經(jīng)度和緯度。 你可以讓用戶通過 選項(xiàng) 菜單或觸發(fā) 按下監(jiān)聽事件進(jìn)行切換 ,在 項(xiàng)目 NooYawk中 , 設(shè)置 按鍵 按下事件方法 用 onKeyDown()方法。例如, NooYawk 項(xiàng)目中使用一個(gè) 圖 層顯示選擇的建筑物位于曼哈頓島。 我們將在下一節(jié)細(xì)看該標(biāo)記。 2. 在構(gòu)造函數(shù)中,創(chuàng)建你項(xiàng)目中 OverlayItem類的對(duì)象,并調(diào)用 populate()方法,他們這是準(zhǔn)備用于覆蓋的。 由 NooYawk構(gòu)造的標(biāo)記是可繪制用于第 5步。 處理屏幕單擊事件 子類也可以覆蓋實(shí)現(xiàn) onTop()方法 ,當(dāng)用戶點(diǎn)擊地圖時(shí)得到通知,所以可以調(diào)整對(duì)它的繪制覆蓋。帶著這些事件,這取決你來做一些值得事情。 ( 2)顯示你在哪里標(biāo)記,其中根據(jù)內(nèi)置可用的羅盤傳感器。要做到這一點(diǎn),我們首先需要?jiǎng)?chuàng)建一個(gè)對(duì)象添加實(shí)現(xiàn)覆蓋方法,并把它添加到列表中: me=new MyLocationOverlay(this, map)。相反,你需要生成你自己的 API密鑰( S)使用在你的應(yīng)用程序中。 ( 2)重讀這些服務(wù)條款,讓你確定你是否真的確定要同意他們的條款。 最棘手的部分是 找到 MDS簽名用于簽名的證書的調(diào)試應(yīng)用程序。這個(gè)簽名的過程中涉及使用的 密鑰和證書管理工具 和 JDK 中包含的用于 JAR 文件簽名和驗(yàn)證的工具 公共的工具。 輸出的 第二行就包含你的 MD5的摘要,由冒號(hào)分隔的一系列十六進(jìn)制數(shù)字對(duì)作為一個(gè) MD5。 你的調(diào)試證書的 MD5摘要,如果你的電腦是蘋果操作系統(tǒng)( Mac OS X)或Linux ,使用下面的命令: keytool list alias androiddebugkey –keystore ~/ .android/ storepass android keypass android 在其他開發(fā) 平臺(tái)上,您將需要更換你的平臺(tái)和用戶 的密鑰的位置: (1) 在 Windows XP操作系統(tǒng)中,使用命令 C: \文件和設(shè)置 \ 用戶 \android 根 目錄 \ 。 所有的安 卓應(yīng)用程序都使用數(shù)字簽名生成證書。 ( 4) API密鑰的注冊(cè)頁面上,粘貼在該 MD5簽名并提交表格。在簡(jiǎn)潔起見,讓我們更專注于狹窄的情況下獲得 NooYawk項(xiàng)目在模擬器上運(yùn)行所需的密鑰。 然后我們 用 onResume()方法和 onPause()方法 啟用和關(guān)閉羅盤 : 關(guān)鍵所在 如果你已經(jīng)下載了本書的源代碼,并編譯 NooYawk項(xiàng)目,把上它安裝在你的模擬器中,并運(yùn)行該項(xiàng)目,你可能會(huì)看到一個(gè)網(wǎng)格屏幕和一個(gè)圖釘,但沒有實(shí) 15 際的地圖。有沒有暫停時(shí)更新位置或方向的活動(dòng)方法,所以建議你用 onResume ()方法在啟用這些功能,并禁止他們時(shí)使用onPause ()方法 。 return(true),} 在這里,我們只是設(shè)置了一個(gè)簡(jiǎn)短的片段從 OverlayItem上彈出式顯示,返回真值,表示我們處理的響應(yīng)器。與 onTop()方法類似 ,在安卓中你可以做很多類似的設(shè)置。 14 您可能還希望做一個(gè)更好的工作覆蓋 draw()方法來處理標(biāo)記的陰影。 4. 覆蓋 createItem()方法返回索引的 OverlayItem對(duì)象。為你覆蓋處理大部分繪制邏輯。如果你正在尋找添加圖釘或類似的子類進(jìn)行覆蓋的話,有一個(gè)可用 ItemizedOverlay 子類,ItemizedOverlay簡(jiǎn)化了這一過程。在地圖界的說法( 和,對(duì)于這個(gè)問題,在許多嚴(yán)謹(jǐn)?shù)膱D形編輯器都有),該圖釘與圖層分開的地圖本身比,你看到的是圖層上面的圖釘層組成的獨(dú)立層。這在安卓手機(jī)地圖一樣可以實(shí)現(xiàn)。捕獲的是, GeoPoint緯度和經(jīng)度為整數(shù),代表實(shí)際的緯度和經(jīng)度乘以 1e6。 居中 通常情況下,你需要對(duì)地圖顯示進(jìn)行控制,如超出縮放級(jí)別,用戶的當(dāng)前位置或與你的活動(dòng)中的一些數(shù)據(jù)保存的位置。每一個(gè)級(jí)別是一倍的有效分辨率: 1赤道測(cè)量 256個(gè)像素寬,而 21赤道測(cè)量 268435456像素寬。 縮放 起初你會(huì)覺得世界地圖是相當(dāng)寬廣。 練習(xí)控制 你可以通過 findViewById()方法找到你 MapView 中的部件,就像系統(tǒng)本身部件一樣。您需要調(diào)用的是 RouteDisplayed()方法表明你是否找到某個(gè)導(dǎo)航方向。此外,在你的 文件中,您將需要添加幾個(gè)額外的東西: ( 1) 獲得網(wǎng)絡(luò)訪問權(quán)限 和 獲得 應(yīng)用訪問