簡析安卓版自駕天氣手機應用的設計與實現論文

簡析安卓版自駕天氣手機應用的設計與實現論文

  1.總體設計

  本系統主要是實現一個以自駕出行線路天氣和景區資訊為核心業務的移動端,隨時隨地為使用者提供路線天氣和旅遊資訊服務。使用者在自駕遊途中,開啟應用可以檢視“出發地—途徑地—目的地”的天氣情況,同時還提供美食資訊,購物資訊。本應用將這些資訊以景點為基礎聯合起來。使用者可以透過一個景點就獲取到景點周邊的美食、購物等資訊,可以一站式的規劃自己的出行安排。

  本應用的主要分為:天氣模組、出行模組、景點模組和實景模組。(如圖1 所示)本應用由三個層次組成,分別為底層模組、支援模組和業務模組。本著依賴項規則:原始碼依賴項只能向上指向,上層裡的所有項不能瞭解下層所發生的內容。

  2.設計與實現

  2.1 天氣模組的設計與實現

  天氣模組本身是一個Fragment,基於產品原型圖、使用者體驗的一致性和APK 框架的設計思想,使用了Fragment 內巢狀五個子Fragment 的形式去實現天氣的子模組。各子模組的Fragment 的生命週期由自己把控,當Tab 切換到子模組上時,子模組開始執行自己的生命週期。

  2.1.1 預報和實況模組

  將佈局檔案和Fragment 類建立起對映,同時給佈局上的控制元件和類裡面的控制元件物件建立繫結關係透過getJSON 方法從網路中獲取天氣預報和實況資料。在安卓4.0 版本及其以上的系統,為了防止網路這一耗時操作阻塞UI 的繪製。因此,新開執行緒非同步地進行網路訪問以獲取伺服器返回的JSON 物件。本應用中網路的訪問均是透過這種模式去實現。

  2.1.2 趨勢圖

  趨勢圖使用畫布類自行繪製,並提供API 修改趨勢圖的走向。天氣趨勢中的折線圖其實現的難度在於,需要一個演算法去計算折線上的點在螢幕上的位置,折線兩點之間的度和計算文字的位置。本應用使用坡度係數這個值去定製折線。

  2.1.2.1 透過螢幕的寬和所需要顯示的點數計算出每一段折線X 軸投影的長度。float wOffset= ((float) this.getWidth() / (2 * topTem.length ‐ 1)) * 2;//X 軸投影長度

  2.1.2.2 透過螢幕的高和坡度係數,以及要顯示資料的最大值和最小值計算出中軸線。

  2.1.3 分析圖

  安卓系統中內建了高效能的Webkit 瀏覽器,在SDK 中被封裝成了WebView。首先透過網路模組提取URL,然後使用loadUrl()語句呼叫,即可在Webview 裡面展示網頁。

  2.2 出行模組的設計與實現

  2.2.1 路線管理

  路線管理由路線列表和路線定製所組成,在一個FrameLayout 中寫兩個佈局,透過設定佈局的可見度,顯示不同的佈局。

  在佈局檔案中,使用幀佈局包裹兩個相對佈局,其中一個相對佈局的可見度為隱藏。並在JAVA 程式碼中,對RadioButton 進行監聽,當點選到其中一個時,路線檢視介面隱藏,路線定製介面展示,反之亦然。

  2.2.2 地圖模組

  天氣的預報、實況、預警以及路線的實況都與地圖有關,應用的地圖使用百度地圖SDK,透過其提供的'API 進行路線的繪製,地圖經緯度的採集。

  自定義線路的實現:有兩種形式,一是沒有途徑點的形式,一是有途經點的形式,沒有途徑點,即呼叫 drivingSearch(String strat, MKPlanNode node1, String end, MKPlanNode node2)方法就可以在地圖上顯示出路線了,如果擁有途經點,就呼叫它的一個過載方法—drivingSearch(String strat, MKPlanNode node1, String end, MKPlanNode node2,List nodes)

  透過drivingSearch 方法我們可以在地圖上展示出一條路線出來。路線的繪製,即在圖上確認一系列的點,將這些點連線成線段,故可以得到起點城市、途經點城市和終點城市的經緯度,透過這些經緯度,我們在其Y軸的做出一定的偏移量,即可繪製出所需要展示的預報、實況和預警資訊。

  2.3 景點模組的設計與實現

  2.3.1 景點導航模組

  景點導航模組由三部分構成,一是熱門景區列表,二是全國熱門景區列表(按省分),三是景點搜尋。

  熱門景區列表是一個ListView,用於展示熱門景區,點選可以跳轉到景點介紹,以及景點的吃住行購。

  全國熱門景點列表是結合百度地圖SDK 來實現的,在省級縮放度的地圖上,每一個省份在地圖上的表現是一個Button,點選進去就可以看到該省份的熱門城市。

  2.3.2 吃住行購模組

  該模組採用APK 框架,上方的Tab + 下面的Fragment。其中吃住購的實現相同,均是一排篩選器和一個ListView構成。行模組是基於百度地圖SDK 的二次開發,展示景點的位置。篩選器有三個,分別是距離、型別和推薦度,採用了自定義Popup Window View 的方式實現。首先自定義一個View 類繼承PopupWindow 和自定義的SpinnerAdapter,然後使用時,初始化,並填充資料。

  2.4 實景模組的設計與實現

  圖片瀑布流,即圖片如瀑布般依次展示在螢幕上。對圖片進行分組,以寬度為定值限制圖片大小,向佈局中動態新增指定列數。

  為了在圖片瀑布流的記憶體使用一直保持在一個合理的範圍,採用了LRU 記憶體快取技術,它的主要演算法原理是把最近使用的物件用強引用儲存在 LinkedHashMap 中,並且把最近最少使用的物件在快取值達到預設定值之前從記憶體中移除。

最近訪問