前言:地圖,定位等SDK在現(xiàn)在的app中應(yīng)用越來越廣泛了秃诵。無論是百度家的還是高德家的,哪個“正兒八經(jīng)”的app要是不用點他們的產(chǎn)品總感覺這個檔次就上不去(有實力的大廠除外)~尤其在大數(shù)據(jù)時代,用戶什么時間在什么坐標,停留了多久等數(shù)據(jù)看似無用慢哈,實際上早已被很多app暗中上傳、暗中分析、暗中觀察了有木有震蒋!
扯太遠,今天想就以前做過的一款運動app(類似咕咚)簡單的談?wù)劯叩耂DK的使用整個系列大概會寫七八篇鳖昌,每篇針對不同的點來談?wù)劯叩孪嚓P(guān)SDK的具體運用一環(huán)套一環(huán)央渣,最后連起來,一個簡版的 咕咚 運動軟件就造出來啦射窒! 高德api并不完美藏杖,一樣有很多坑,寫這個系列的目的一是總結(jié)一下之前get到的知識脉顿,另一方面也是幫助需要做類似功能的朋友們更好的運用SDK蝌麸,避免一些大坑~
高德SDK涉及到東西很多,跟百度一樣艾疟,有 定位来吩,地圖,導航等好幾大模塊蔽莱,既然都說了要徒手造咕咚弟疆,而咕咚的核心是運動數(shù)據(jù)記錄,涉及到定位碾褂!定位又需要地圖作為基礎(chǔ)兽间,so,這里先通過幾個demo帶大家 從基本的地圖SDK入手正塌!
一嘀略、初識高德地圖SDK常見類
整個高德地圖api也是采用面向?qū)ο蟮脑O(shè)計思路,SDK包含了各種具有不同能力的類乓诽,開發(fā)者要做的其實很簡單
- 明確要實現(xiàn)的功能帜羊。
- 找到與之有關(guān)的類,查看該類在官方demo中的應(yīng)用
- 寫邏輯實現(xiàn)
廢話不多說鸠天,下面直接重點介紹最最最重要的幾個類
MapView:地圖對象讼育。
整個地圖view,它的內(nèi)部包含了很多其他的小對象稠集,如一個“覆蓋物”奶段,一條“線”,一個“點”剥纷,一個“面”等痹籍,它有和activity類似的生命周期,并且需要在activity調(diào)用生命周期的方法里一起調(diào)用如:
/*
* 方法必須重寫
*/
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
//deactivate();
}
AMap:地圖控制器晦鞋。
每個MapView都會有一個地圖控制器蹲缠,顧名思義棺克,地圖控制器就是用來控制這個地圖對象的。 怎么個控制法线定?問得好娜谊!
整個地圖SDK涉及到的功能無外乎
- 地圖旋轉(zhuǎn),縮放斤讥,自帶部件顯示(主要包含地圖上的指南針纱皆,比例尺等東西)
- 地圖添加點,線芭商,面抹剩,立體物
- 添加各種監(jiān)聽(地圖加載狀態(tài)監(jiān)聽,物體點擊監(jiān)聽蓉坎,物體狀態(tài)改變監(jiān)聽等等等一大堆,)
- 控制相機 (相機模塊下面會有介紹胡嘿,不要急)
- 地圖截屏蛉艾,距離、面積計算等
總結(jié)下來就這么幾大類衷敌,幾乎每種都需要用到AMap~所以勿侯,這個類很強大,很重要缴罗。
CameraUpdateFactory:相機工場類助琐。
這是一個很容易被名字誤導的類,Camera面氓?自拍么兵钮?
要知道,地圖是很大的舌界,手機屏幕是很小的掘譬,如何在很小的屏幕上去呈現(xiàn)這個很大的地圖呢?自然就需要縮放和截取呻拌,屏幕上看到的地圖永遠是經(jīng)過 縮小葱轩,和截取的一部分區(qū)域!而具體 縮放多少藐握,截取呈現(xiàn)哪一部分呢靴拱?這個就是通過CameraUpdateFactory來控制的。
結(jié)合名字理解:相機更新工場猾普,不難猜出袜炕,工場設(shè)計模式,那么其返回CameraUpdate對象抬闷,作用是更新當前的顯示區(qū)域妇蛀。
例如:目前的比例尺是x:1耕突,屏幕顯示的是上梅林卓越這邊的縮放圖。如果我想實現(xiàn)點擊某個按鈕后评架,屏幕由上梅林切換到相隔數(shù)千米外的景田蓮花山(切換的方式有多種眷茁,閃切或者帶動畫的平移過去等都能實現(xiàn)) 就要用上CameraUpdateFactory了。
一個這么厲害的類纵诞,自然封裝了很多了不得的方法~不會用不要急上祈,這里先了解就好。
LatLng:高德坐標點浙芙。
這是一個包含經(jīng)度longitude 和緯度latitude的坐標類登刺,上面那個示例中的第一行代碼其實就是獲取一個高德坐標點而已。
所謂點連成線嗡呼,咕咚的運動記錄里面其實就是將一個個類似LatLng的點連起來而已纸俭,最后附上顏色,看起來就成了一段連貫的線~
至于怎么做到那么平滑南窗,還有為什么說是類似LatLng的點 這兩個問題后面回答~
Marker :地圖覆蓋物
這是一個灰常有用的類揍很,顧名思義,覆蓋在地圖上的物體万伤! 任何東西(圖片窒悔,文字,一個View) 都可以通過構(gòu)造一個Marker來添加到地圖MapView上面顯示出來~先看效果
如圖敌买。在剛才移動到的坐標上添加一個Marker(其實是一個View)简珠,看看代碼:
LatLng start=new LatLng(dps.get(0).getLat(),dps.get(0).getLon()); //還是獲取那個點LatLng
MarkerOptions markerOptions = new MarkerOptions(); //Marker的構(gòu)造輔助類MarkerOptions,其實就是設(shè)置Marker的各種屬性
markerOptions.anchor(0.5f, 0.5f); //中心基準位置
markerOptions.icon(BitmapDescriptorFactory.fromView(getStartViewByXML(mContext, R.drawable.testhead)));
//上面這行是重點 設(shè)置覆蓋物的icon 通過BitmapDescriptorFactory的fromView方法虹钮,顧名思義~就是從一個view加載聋庵,
//所以getStartViewByXML(mContext, R.drawable.testhead)方法就是LayoutInflater出一個view罷了,只不過恰巧芙粱,這個view很美U洳摺!宅倒!
markerOptions.visible(true); //設(shè)置可見
markerOptions.position(start); //這個 覆蓋物的位置攘宙,就是那個坐標點嘍
markerOptions.perspective(true).draggable(false); //不讓拖拽~
markerOptions.setFlat(true); //屬性太多 這個忘了,拐迁,不是很重要
aMap.addMarker(markerOptions); // 看到?jīng)]蹭劈,,aMap又登場了线召! 簡直就是場控
Polyline :線段
到這里~基礎(chǔ)篇的主角登場啦铺韧!沒錯,就是線段缓淹!咕咚運動的軌跡回放模塊核心就是呈現(xiàn)你運動的軌跡哈打,而線段塔逃,就是軌跡的具體表現(xiàn)形式!這里上三張圖對比
第一張:咕咚軌跡回放截圖
第二張:之前的基礎(chǔ)上添加了另外一個不太美的Marker料仗,然后連成Polyline
第三張:將第一張放大湾盗,可以看到原來圖1中平滑的軌跡立馬出現(xiàn)明顯的棱角(9個點連起來的8段線)
結(jié)論:咕咚的軌跡回放功能的本質(zhì)就是記錄下運動過程中的若干坐標點,最后將這些點兩兩連成線就成了軌跡立轧!就是這么簡單8穹唷!
到此氛改,徒手造咕咚系列的第一篇就寫完了帐萎!你看吧,其實咕咚核心的功能之一:軌跡回放模塊灰常簡單胜卤,簡單到筆者只是調(diào)用幾個高德api疆导,秀下恩愛,擼兩行代碼就差不多實現(xiàn)了~
最后的最后再BB兩句~慢跑是很一項很不錯的運動葛躏!希望大家在“沉迷工作無法自拔”的同時每周能抽出點時間出去跑兩步久坐是鬼,長吹空調(diào)的話,偶爾出點汗紫新,對身體是極好的呦!