這一節我們來講解這個專案所用到的一些技術,以及一些實現的效果圖,讓大家對該專案有一個整體的認識,推薦大家收藏該文章,因為我們釋出文章後會在該文章裡面加入連結,這樣大家找著就很方便。
目錄 第1章 前期準備
記得那是很多年前,我們去網咖的時候,都會用到酷狗音樂,因為他有卡拉OK歌詞滾動,然後在玩著遊戲,開著歌詞顯示到遊戲前面感覺逼格很高,那時候還不知道網易雲音樂這軟體,所以當就想著卡拉OK歌詞這麼神奇,我要是能做出來就好了,但是很遺憾那時才上高中,也就學了點C語言寫寫微控制器而已,還寫不出這麼高大上的功能;直到後來上班不知怎麼遇到了網易雲音樂,就用上了,也說不出網易雲音樂有多好,甚至連卡拉OK歌詞都沒有,但是就感覺他的介面做的沒那麼複雜,如果你去看看其他的音樂軟體就會發現介面有點複雜;雖然後面上班後也會一些技術了,但很遺憾的是上班後根本就沒有時間,天天都是需求Bug,不是領導催就是測試催,不是測試催就是產品催,不是產品催就是UI催...,週末就更不想寫了,就想睡覺,現在辭職創業了也有時間了,所以就做這樣一門課程,也來完成我們多年的一個夢想,來寫一個我的雲音樂,大體的介面和互動邏輯和網易雲音樂類似,主要是學習和鞏固在Android中如果實現,音樂播放,視訊播放,卡拉OK歌詞,LRC歌詞,以及桌面歌詞,聊天,動態等功能,這一系列的文章我們會先後講解Android的實現,iOS的實現,服務端的實現,Mac系統的時候,Windows系統的實現等平臺,讓大家能學習一個完整的知識體系,雖然學完以後做不了牛逼的全棧,但是你會體驗到每個平臺,每個語言的不同和精髓,這對大家是有幫助的。
我們這裡仿照的版本是Android App 5.2.0.437608。
針對原版App最大的改進就是支援卡拉OK歌詞,原版App是逐行滾動。效果圖如下:
LRC逐行滾動歌詞效果如下:
下面就對我們專案用到了一些技術和框架做一個整體介紹,讓大家對該專案有一個整體的認識:
網路框架:OKHttp,選用他的目的是可以通過攔截器很好的擴充套件他,同時他也可以很好的配合RxJava和Retrofit這樣的框架來完成請求,但是我們專案中可以只用到了這個框架的10/1的功能,所以想深入學習的朋友們請學習我們的推出的《詳解OkHttp》課程。
在通知欄顯示請求:chuck-library,用這個框架是可以從通知欄中檢視到每一個請求,好處是不需要在電腦上抓包,也不需要給手機配置代理,特別打測試包時,測試人員也能通過這個看到,到底是客戶端還是服務端問題一目瞭然,還有就是很多時候服務端讓你給他發一個請求的請求引數等,用了這個庫後,給他一個包,讓他們愛怎麼倒騰怎麼倒騰,不用每次都找我們開發人員,從而專注工作,爭取不加班。該框架在不會打包到線上環境中。效果如下圖:
可以通過Chrome抓包:stetho,該工具是Facebook開源的,可以在Chrome瀏覽器中抓包,好處是開發的時候不用去觸控到手機,直接在電腦上抓包就行了,畢竟大多數程式設計師就很懶,例如我就是;像微信每次電腦登入的都的掃碼,想想都心累,所以就基本不用微信,明明可以記住密碼。該框架在不會打包到線上環境中;該庫有個缺點是依賴Chrome,還有就是第一次開啟抓包介面需要翻牆,所以基於這些點其他人員使用就很麻煩,而上面哪個庫就沒這些問題。
JSON解析:Gson,該框架時Google開源的,同類的框架有FastJSON,JackSON到他們那個好,我們暫時還沒做個相應的測試,如果那麼朋友知道做個可以在新增我們的QQ進行討論。
圖片載入框架:Glide,該框架是Google一位員工開發的,但不是官方專案,這一點大家要注意,同時在官方倉庫中也註明了。該框架有一個好處就是他可以獲取到當前ImageView的尺寸,然後我們可以通過這一點來動態裁剪圖片,例如:一個列表顯示的圖片尺寸為200PX,而原圖是1000PX,所以在列表介面就沒必要載入原圖了,可以直接裁剪成200PX顯示,這樣既省流量載入速度又快,同類框架有Picasso,Fresco,具體的我們後面會推出一門關於Android圖片載入框架的課程,會綜合所有圖片載入框架,先分析原始碼,然後總結出每個框架的有點和缺點,如果有必要可以綜合所有框架有點在打造一個框架。
Palette:該框架是Android官方提供的調色盤庫,簡單來講就是可以同圖片中提取出多個顏色,比如:明亮的,柔和的等,該框架雖然簡單但邏輯還是稍微有一點複雜,因為他內部用到了顏色減值演算法,同時我們在《詳解Material Design》課程中分析的原始碼,還將該框架移植到iOS和Python。效果如下圖:
CardView:該框架是Android官方提供的,可以用來實現圓角和陰影,詳細的使用我們也在《詳解Material Design》課程講解了。效果可以檢視下面的,首頁圖,發現Banner,還有Item都是有圓角的效果。
PhotoView:用來手勢縮放圖片,用在檢視專輯大圖時。
glide-transformations:該框架是用來結合Glide使用的一個圖片處理特效庫,提供了很多動畫,我們這裡用到的是高斯模糊效果,用在播放介面背景效果圖。效果如下圖:
MagicIndicator:用來代替TabLayout實現指示器效果,因為TabLayout自定義度要小一點。在首頁的效果如下圖:
commons-lang3:是Apache開源的一個常用工具類,同樣在Java中也是經常使用,他提供了ObjectUtils,RandomUtils,SystemUtils,StringUtils等工具類;我們這裡用到了StringUtils。
commons-io:同樣還是Apache開源的一個常用工具類,可以從名字看出來是針對IO操作的,我們這裡用到了FileUtils,因為大家經常用Java就會發現Java操作檔案很麻煩,各種類不要太多,不信你可以隨便找個做Java幾年的人問,基本上說不出Java中和IO相關的類和繼承關係;當然我們這裡使用了OkHttp,而OkHttp又引用了OkIO,所以你可以通過OkIO來操作檔案,關於OkIO的部分我們後面會增加到《詳解OkHttp》課程中。
Emoji:以前的Android版本不支援Emoji,所以只能自己實現,現在Google提供了相容庫可以讓我們很方便的實現;用在評論和動態介面。效果如下:
Multidex:使用的是Android官方提供的;當然你可以通過Gradle來自己實現分包。
動態流佈局:flow-layout,用來實現像熱門搜尋這類流式佈局。效果如下圖:
第三方登入和分享:第三方登入使用的是ShareSDK。
LRecyclerView:使用它來實現對RecyclerView新增頭部和下來重新整理功能;如果想深入學習實現的朋友可以學習《詳解RecyclerView》課程。
下載框架:AndroidDownloader,這是我們開源的一個下載框架。效果如下圖:
Toolbar,CoordinatorLayout:可以說CoordinatorLayout是Android Design包中最複雜控制元件之一一點兒也不為過,因為他擴充套件性超強,詳細的使用方法和原始碼分析在《詳解Material Design》課程中講解了。基本上所有介面都用到了Toolbar,CoordinatorLayout,但效果就是使用者詳情頁頁面的TabLayout懸停效果,預設如下圖:
TabLayout懸停的效果如下:
資料庫:使用了的是LiteOrm,同類框架有GreenDao他的使用到的類需要每次生成,但是網上的測試都說他效率更高,具體的我們暫時沒有做個相關的測試,OrmLite。
聊天:使用到的融雲IM,不帶UI的那種,因為大部分請求下整合聊天都要自定義UI,同時也只有學會了自定義UI如何使用一個框架,那麼以後在整合環信,騰訊IM等框架道理都是一樣的;另外選擇融雲是因為他有Ruby語言的SDK,這樣服務端實現就很簡單了。效果如下圖:
日期和時間:Joda-time,這個庫在Java專案中使用很多,因為如果你經常使用Java自帶的Api來處理日期和時間你就會發現很麻煩,所以說用該框架操作日期和時間是很方便的,還有一個點就是時區,所以我們服務端返回的時間都是ISO8601格式,而不是時間戳。
picture_library:用來選擇圖片,同型別的框架有很多,大家可以根據自己的喜好選擇,而且選擇圖片難度也不到,所以也可以先學習下其他開源框自己在封裝一個。用在傳送動態和聊天傳送圖片。
阿里雲OSS:用來發布動態時上傳圖片,現在很少有應用還自己存這些資源,好處是CDN,快取等功能,不用擔心效能和儲存空間不夠;同時他還提供水印,以及圖片處理功能。
有米廣告SDK:廣告SDK可以說是很多,騰訊,360,小米都有;用在啟動介面顯示插屏廣告。效果如下圖:
效果的話和原版差不錯,就是這個廣告畫風不太好。
跨介面通訊:這裡使用的是EventBus,同類框架有餓了麼也開源了一個。
Butterknife:用來快速繫結介面上的View和方法,該框架是基於APT實現,所以大家不要面試不懂千萬不要說,這不就是註解實現的嗎。
本課程中不會涉及到的內容,因為是本課程這是第一版本,不會涉及到MVP,MVVM,Kotlin等相關的技術,後續我們會在該課程的基礎上用相應的基礎實現,第一版要專注實現核心功能,而不是各種設計模式,各種架構。
注意:框架只是用來提高開發效率,並不能讓你有多大的提高,也就說一個功能或者一個演算法你實現不了,雖然用框架可能解決了問題,但是脫離了框架你就什麼都不是了,所以大家平時還是要多深入學習,而不是僅僅停留在使用框架層面,只有這樣才能讓你走的更遠。
如果感覺我們寫的不錯,可以支援我們一下,本專案提供的線上電子書和線上視訊教程,在官網購買可以優惠5元喲,同時視訊課程也可以在網易雲課程,騰訊課堂上購買,如果有任何問題可以新增我們的QQ來討論:3469271680;評論可能回覆不是很及時,還望大家體諒;購買課程後可以獲得一對一答疑服務,當然也可以談人生談理想瞎扯淡;同時如果是零基礎想學程式設計的朋友也可以聯絡我們進行諮詢,我們可以提供一些建議和幫助,讓你在程式設計道路上更順暢。