
點擊上方藍字關(guān)注碼個蛋
一招一式 , 看遍天下
作者:IAM四十二
博客:http://www.jianshu.com/u/c6f7cfa366d9
文章目錄
- 前言
- 效果圖
- 地圖MapView實現(xiàn)
- 地圖MapView的簡單顯示
- MapView顯示到當前位置
- 添加View到MapView
- 地圖MapView的簡單顯示
- 街景地圖PanoViewActivity實現(xiàn)
- 街景地圖PanoView基礎(chǔ)
- 將地圖MapView展示在街景PanoView上面
- 實現(xiàn)對街景視圖操作的監(jiān)聽
- 街景地圖PanoView基礎(chǔ)
前言
使用過百度地圖的同學(xué)知道 , 它有個街景功能,可以看到許多地方的實景 。這里就其街景內(nèi)容的實現(xiàn),進行下學(xué)習(xí) 。
在百度地圖SDK的官網(wǎng)(http://lbsyun.baidu.com/)上可以看到,百度對開發(fā)者提供了很多相關(guān)的內(nèi)容,方便我們進行學(xué)習(xí) 。關(guān)于SDK的使用方法 , 包括jar包導(dǎo)入,*.so 動態(tài)庫的添加位置及AndroidManifest文件的配置不做為我們這里討論的內(nèi)容,官方文檔已經(jīng)介紹的很詳細,不做無聊的搬運工 。
什么是鏈接?鏈接是指兩個設(shè)備之間的連接 。它包括用于一個設(shè)備能夠與另一個設(shè)備通信的電纜類型和協(xié)議 。
1
效果圖
這里我們首先預(yù)覽下,今天最終要實現(xiàn)的效果圖
靜態(tài)圖1
靜態(tài)圖2
效果圖
如圖所示 , 我們這里的實現(xiàn) , 就是兩個頁面的內(nèi)容,一個是基礎(chǔ)的地圖MapView,一個是街景地圖PanoView 。接下來,就這兩個頁面(Activity)分別展開來說 。(由于GIF圖片大小限制,效果不是很理想,文章結(jié)尾有源碼地址,可以自己跑一下看一下效果先)
2
地圖MapView實現(xiàn)
地圖MapView的簡單顯示
布局文件
Application
一般情況下,我們的應(yīng)用程序都會有一個繼承自Application的類,用于實現(xiàn)一些初始化的方法,這里可以在Application里執(zhí)行一些百度地圖初始化的工作,這也是官方提倡的方式 。
Activity
在Activity的OnCreate方法中實現(xiàn)
上面這樣一段簡單的代碼,就可以在Activity中顯示出一個MapView,也就是我們最熟悉的地圖頁面 , 是不是很簡單,就像我們顯示一個TextView一樣 。
這里說明寫一下,按照官方的API指導(dǎo)文檔,使用MapView等百度地圖SDK所提供的各種實現(xiàn),是需要去申請相關(guān)的key的,申請的方法在官網(wǎng)有著詳細的介紹,這里就不再粘貼復(fù)制了;很多同學(xué)在使用MapView的時候發(fā)現(xiàn),程序運行后地圖沒有顯示,顯示的都是一些方格子,這往往是由于key沒有申請,或申請的方式不當造成的
MapView顯示到當前位置
每次打開百度地圖,都會自動定位到我們當前所在的位置,或者是我們搜索某個特定的地方作為新的位置,整個地圖所呈現(xiàn)的區(qū)域都是新位置周邊的環(huán)境 。這里,關(guān)于地圖的定位和搜索的相關(guān)實現(xiàn)內(nèi)容,就不展開來說 , 不當做此次的重點 。
假設(shè)我們已通過定位(或者是搜索),定位了到了一個位置
這個位置按照新聞里常聽到的說法就是,東經(jīng)116.40度,北緯39.96度,位于北京市東城區(qū)舊鼓樓大街丙1號 。
接下來,我們要做的就是將MapView的視圖更新到我們定位的位置 , 這個位置周邊的地圖才是我們關(guān)心的 。
這里的mBaiduMap 是一個BaiduMap的實例 , 通過MapView的getMap方法即可獲得 。我們對地圖的各種操作,設(shè)置屬性都是基于這個實例進行 。
通過上面的代碼,我們就可以將MapView的視圖更新到我們所想要的位置了 。
添加View到MapView
添加Marker
按照百度地圖API的說法,我們添加到地圖上的小圖標統(tǒng)一稱為Marker 。
通過上面的實現(xiàn) , 我們就可以將一個小圖標添加到地圖層,作為標記 。我們?nèi)粘J褂玫貓D時,所搜周邊后呈現(xiàn)的一系列小圓點就是如此(如下圖)
倒車影像不清晰是怎么回事,倒車影像不清晰怎么調(diào)試倒車影像模糊或不清晰的的原因及解決方法: 1、目前市面上出售的倒車攝像頭基本都是防水的,如果我們購買到劣質(zhì)的攝像頭 。
marker示意圖
ShowInfoWindow使用
最后一步,實現(xiàn)顯示街景縮略圖的那個小彈框 。
這里首先自定義一下我們要添加到地圖層的View 。
這里pic這個ImageView用于顯示我們要展示的街景縮略圖 。pano_overlay是整個彈框的布局,很簡單,這里就不貼代碼了 。
同時,我們?yōu)檫@個自定義View設(shè)置點擊事件,方便我們跳轉(zhuǎn)到PanoView街景地圖頁面,并且將當前位置傳遞過去 。
由于祖國地大物博 , 所以街景的覆蓋并非百分之百,所以說,不是每個地方都有街景可以顯示,有些鳥不拉屎的地方是看不到的 。那我們怎么知道什么地方有街景呢?API為我們提供了很好的檢測方法
這樣,我們就可以根據(jù)當前位置,先檢測一下是否有街景可以顯示 。這里,如果當前位置有街景,我們就通過Handler通知主線程去更新UI
這里看一下,InfoWindow的說明及其構(gòu)造函數(shù)
public class InfoWindow extends java.lang.Object在地圖中顯示一個信息窗口 , 可以設(shè)置一個View作為該窗口的內(nèi)容,也可以設(shè)置一個 BitmapDescriptor 作為該窗口的內(nèi)容 。
在Handler的handleMessage方法中,我們通過返回的url加載圖片,并將自定義的彈框View顯示到之前一步添加的marker偏上一點的地方(這就是InfoWindow的構(gòu)造函數(shù)中-57的意義)
關(guān)于這個加載圖片的URL , 可以參考這里靜態(tài)圖API(http://lbsyun.baidu.com/index.php?title=viewstatic) 。
這樣,就實現(xiàn)了MapView頁面所有的內(nèi)容 。通過點擊InfoWindow,就可以跳轉(zhuǎn)到PanoView所在的界面去查看街景地圖 。
接下來 , 我們將介紹PanoView街景地圖的實現(xiàn) 。
3
街景地圖PanoViewActivity實現(xiàn)
街景地圖PanoView基礎(chǔ)
街景地圖PanoView的顯示和基礎(chǔ)地圖MapView十分相似
首先是在布局文件中定義view
在Activity的OnCreate方法中
這里同樣需要的是在Application類中做一些初始化工作;對我們所使用key的有效性進行檢測 。
同時在Activity里也需要做一些初始化的工作 , 最后就是通過PanoView的setPanorama()方法實現(xiàn)街景的顯示 。
關(guān)于這里用到的setPanorama(),根據(jù)API我們可以看到
也就是說,不僅通過經(jīng)緯度,而且可以通過別的方式實現(xiàn)街景地圖的功能 , 甚至室內(nèi)景的實現(xiàn) 。這里我們就使用了大家最熟悉的經(jīng)緯度,對于別的實現(xiàn)方式有興趣的同學(xué),可以自己去探索一下 。
將地圖MapView展示在街景PanoView上面
如圖所示 , 將一個MapView顯示在PanoView之上;很自然的我們會寫出下面的布局方式:
這樣,我們在整個PanoView的左下角定義一個60x60大小的view用于顯示一個MapView 。
實現(xiàn)對街景視圖操作的監(jiān)聽
街景SDK為我們提供了PanoramaViewListener這個接口,可以實現(xiàn)對從街景視圖開始繪制到完成繪制,對街景地圖的操作(如點擊,旋轉(zhuǎn))的監(jiān)聽 。
這里我們重點看一下onMessage(String msgName, int msgType)這個回調(diào)方法 。
這里不得不吐槽一下 , 官方所提供的API文檔,對這個onMessage回調(diào)方法中的參數(shù)居然沒有任何有價值的解釋 。這里的8213及12302完全是通過打印日志自己總結(jié)出的規(guī)律 。
這樣,我們對于不同的操作 , 就可以通過Handler實現(xiàn)不同的UI效果 。我們看一下handler的實現(xiàn):
這里的處理就分兩種情況:
- 點擊事件
- 旋轉(zhuǎn)事件
在UI線程中,我們可以通過不斷移除和添加Marker,并設(shè)置不同的marker的偏轉(zhuǎn)角度 , 從而實現(xiàn)一種在左下方小地圖上呈現(xiàn)我們當前視角的效果 。
好了,這樣就簡單模仿了一下百度地圖街景的部分實現(xiàn)功能,由于UI資源所限制,部分效果并非完全一致 , 這里只是學(xué)習(xí)下而已 。
代碼已上傳至github(https://github.com/REBOOTERS/AndroidPanoramaSample)
留言有福利,具體規(guī)則請看
「幫你養(yǎng)成好習(xí)慣」
【百度一下 你就知道百度地圖 百度一下知道了百度】老總裁的處世哲學(xué):我在一家電器公司任銷售經(jīng)理 。起初,因為有些事情不懂,經(jīng)常去征求老總裁的意見 。有一次 , 我收到一位客戶的投訴,說有幾件產(chǎn)品不合格 , 要求全部退貨 。我對此自然拿不好主意,就去找老總裁 。當時,他正在車間里和員工們討論著什么 。產(chǎn)品不合格當然不是一件光...
猜你喜歡
- 百度一下你就知道百度首頁 百度一下知道了百度
- 情感與形式pdf百度云 瑞恩情感百度云
- 百度一下百度知道精選 百度一下知道了百度
- 百度一下 你就知道百度翻譯 百度一下知道了百度
- 內(nèi)存怎么插才雙通道 看完你就明白了
- recovery電腦怎么解決 看完你就知道了
- vivo手機怎么用耳機 快來這里學(xué)一下
- 蘋果掉簽如何解決 看完你就知道了
- 打開百度app 百度入口
- 百度學(xué)科網(wǎng)精準教學(xué)通 百度學(xué)科網(wǎng)
