最近公司組織培訓,跟著外請老師學習了 RxAndroid + Retrofit + Databinding + MVVM
的 Android
開發技術。在培訓之前,自己通過網絡對這些技術有過了解,感覺很好玩的樣子。經過培訓后進一步發現,使用這些技術的結合,寫起代碼來果然很爽。
老師在實戰部分,帶領我們制作一個仿《推酷》app
的項目。在項目中,使用了上述的技術,并涉及到代碼的封裝。 項目果然是學習技術的最佳場所,自己感覺收獲頗多。但怕時間長了會有些遺忘,因此,使用文章將項目構建的過程一一記錄下來。
準備
既然是仿,那就相當于原型設計、界面等材料都有了,不過自己還是得分析一下,好在實際編碼之前相好項目的框架結構。
推酷首頁是分類新聞列表的展示頁面,頂部的工具欄是 Android
官方典型的 Toolbar
的結構,中間內容使用 ViewPager
顯示。
在屏幕左側向右拖動、或點擊 Toolbar
左邊的菜單按鈕,會彈出側滑菜單。根據側滑菜單的樣子看,應該使用了 Android
官方 meterial design
庫中的 NavigationView
控件。
反編譯
雖然有了界面顯示,但是還缺少切圖。當然,沒有美工會為你做這個事情。本來就是學習,那就 DIY
到底,反編譯[1]下吧。反編譯后發現,源碼竟然沒有混淆,簡直是極好的啦。從源碼的目錄結構中發現了以下東東:
- 官方包——
support
庫使用了design
、V4
、V7
包; - 圖片——圖片預覽
chrisbanes/PhotoView
,圖片加載顯示nostra13/Android-Universal-Image-Loader
,圖片加載組件fresco
- 動畫——支持在低版本(API 11 以下)使用 Android 屬性動畫以及 3D 旋轉動畫的框架
JakeWharton/NineOldAndroids
,徽章圖片庫nekocode/Badge
-
HTTP
——apache
-
html
解析——jsoup
-
ImageView
——圓形ImageView
庫vinc3m1/RoundedImageView
-
ListView
——拖動排序庫bauerca/drag-sort-listview
,列表滑動時每一節的頭部一直停在列表頂部直到有同樣類型的節頭部到達列表頂部的庫vinc3m1/RoundedImageView
,左滑右滑庫baoyongzhang/SwipeMenuListView
-
ExpandListView
——MarkMjw/TreeView
-
GridView
——為GridView
控件添加頭部 - 底部導航——模擬
design
庫的Bottom Navigation
樣式的庫Ashok-Varma/BottomNavigation
- 對話框——
meterial
風格的對話框庫afollestad/material-dialogs
- 進度顯示——
Meterial
風格的ProgressBar
庫DreaminginCodeZH/MaterialProgressBar
,光滑不確定進度的庫castorflex/SmoothProgressBar
,變形球加載控件dodola/MetaballLoading
,橫向水平線進度條daimajia/NumberProgressBar
- 提示信息——
keyboardsurfer/Crouton
- 菜單——動態圓形浮動按鈕庫
CircularFloatingActionMenu
,可以反作用于滾動事件的類庫makovkastar/FloatingActionButton
-
ViewPager
指示器——ogaclejapan/SmartTabLayout
- 搜索——用
meterial design
風格實現的搜索功能庫MiguelCatalan/MaterialSearchView
- 滾動——用于觀察滾動事件和滾動
view
的庫ksoichiro/Android-ObservableScrollView
- 拍照——
commonsguy/cwac-cam2
- 效果——波紋效果
baoyongzhang/SwipeMenuListView
,seekbar progressbar button
的波紋效果aNNiMON/PaperStyleWidgets
- 用戶引導——
amlcurran/ShowcaseView
- 統計分析——友盟
- 社會化——
Mob
- 第三方應用相關——微信,魅族認證,新浪微博,
- 適配——魅族
flyme
的反射類
太讓人吃驚了,各種類庫,各種類庫!!! 除了官方的幾個庫,其它的庫幾乎都來源于 GitHub
。可真是:用好 GitHub
,走遍天下都不怕!一個 8M 的 app
就使用了這么多的庫,想一想我近 20M 的 app
,再想想使用的庫,真的慚愧呀!
通過反編譯,也可以獲取圖片、字符串、動畫等資源。好多目錄,看來推酷為了做適配,也是蠻拼的。
創建項目
這步沒啥好說的,按步就班的來就可以了。唯一要注意的是:支持的最小 SDK
版本選擇 API 16
,這是因為 GitHub
上有些庫對此有要求。
下期預告
今天大概看了一下原版 App
的界面,對它的結構進行了簡單的分析,再就是準備開發用到的資源和創建項目了。現在萬事具備,只欠東風。這里的東風指的當然是時間。明天如果有時間,就先把項目的框架,即首頁的側滑菜單、頂部 Toolbar
、和內容區域的 ViewPager
搞定吧。
-
注:mac 下的反編譯教程可以參考 http://www.lxweimin.com/p/b3bb4da64dc7 這篇博文。講得灰常好,相關的工具下載也都能找到。 ?