博主是2019級本科畢業(yè)生,畢業(yè)設(shè)計選擇了自己較為熟悉的安卓開發(fā)項目,同時因為對地圖API的應用比較熟悉,所以選擇了會用到高德API的跑步APP開發(fā)。
本項目安卓端開發(fā)均由博主完成,其中使用了一些開源的安卓組件(具體跑步路徑規(guī)劃算法本文不詳細介紹),本項目跨度時間較長,從2018/12-2019/05一直斷斷續(xù)續(xù)進行開發(fā)和優(yōu)化。
本項目架構(gòu)采用三層架構(gòu)模式(數(shù)據(jù)層、業(yè)務層、應用層),本文會逐步介紹本項目的體系結(jié)構(gòu)
應用層
安卓客戶端的設(shè)計和實現(xiàn):
主界面為三屏設(shè)計,可以通過左右滑屏實現(xiàn)切換,這一邏輯交互的通過Fragment+ViewPager實現(xiàn)。
正一屏是本APP的主要交戶結(jié)滿,其中用戶可以選擇跑步距離(自定義滑動刻度尺組件)和跑步形狀(PopWindow),同時可以和下半部的地圖交互。其中比較特殊的是,我將滑動刻度尺和地圖的縮放關(guān)聯(lián)在一起,滑動刻度尺時,地圖也會隨之縮放。

負一屏是用戶的跑步記錄瀏覽,跑步記錄是利用自定義RecylerView實現(xiàn),添加了滑動刪除的功能。同時對RecylerView下部添加了層疊效果。

正二屏很簡單,用戶中心界面,點擊可以跳轉(zhuǎn)到不同的功能界面。本文的圖片控件是使用Fresco,可以直接加載網(wǎng)絡(luò)圖片已經(jīng)調(diào)整圖片的形狀,關(guān)于Fresco,可以自行百度,博主之前也介紹過。
規(guī)劃路徑選擇、規(guī)劃導航界面的設(shè)計較簡單,在此略過。

調(diào)用的API
本項目的登陸功能是調(diào)用微博API實現(xiàn),同時可以通過相關(guān)接口,獲取微博用戶的Token信息。微博API同時提供了分享功能,可以直接分享在登錄用戶的微博中。

本項目的地圖使用高德API,博主參考了幾家不同的地圖API,功能大同小異,最終采用了較為熟悉的高德API。高德API提供了地圖顯示、定位藍點、路線規(guī)劃、路徑導航等基本功能,配合使用效果更佳,具體實用參考官方文檔。

本項目的數(shù)據(jù)庫使用云數(shù)據(jù)庫Bmob,調(diào)用了Bmob API。
業(yè)務層
路徑規(guī)劃
本項目是我的畢設(shè)導師連續(xù)三年都在進行的項目,路徑規(guī)劃算法也是從第一代不斷改進,直至在我這改進成花狀路徑規(guī)劃算法,第一代即圓形路徑規(guī)劃算法。
路徑規(guī)劃算法的基本思想是在地圖上尋找圖形關(guān)鍵點,然后在關(guān)鍵點之間尋找真實路徑。最終連接這些路徑即為所需的規(guī)劃路徑。
數(shù)據(jù)庫連接
本項目采用Bmob云數(shù)據(jù)庫,同時因為省去了服務器端,所以是直接通過安卓端和云數(shù)據(jù)庫進行連接。云數(shù)據(jù)庫Bmob的使用參考官方文檔。
數(shù)據(jù)層
Bmob云數(shù)據(jù)庫
Bmob云數(shù)據(jù)庫使用簡單,維護便捷??梢灾苯油ㄟ^網(wǎng)頁直接對數(shù)據(jù)庫表進行維護。
數(shù)據(jù)庫中主要有兩個數(shù)據(jù)表:用戶信息表、跑步記錄表,兩個表通過外鍵-微博賬號進行關(guān)聯(lián)。
Bmob數(shù)據(jù)表中自帶主鍵ObjectId,我將微博賬號也設(shè)成了主鍵。
項目GitHub地址:花狀路徑規(guī)劃APP