青青草免费线看线看|啊在车上停不下来了|国产少女免费观看电视剧|仑乱88MAV|精品老司机在线观看视频|国产一区二区三区高清免费视频|在线观看免费777av

百度一下 你就知道百度地圖 百度一下知道了百度


百度一下 你就知道百度地圖 百度一下知道了百度



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

    猜你喜歡