這一節(jié)我們來講解這個(gè)項(xiàng)目所用到的一些技術(shù),以及一些實(shí)現(xiàn)的效果圖,讓大家對(duì)該項(xiàng)目有一個(gè)整體的認(rèn)識(shí)串结,推薦大家收藏該文章,因?yàn)槲覀儼l(fā)布文章后會(huì)在該文章里面加入鏈接,這樣大家找著就很方便肌割。
目錄
第1章 前期準(zhǔn)備
? 第1節(jié) 項(xiàng)目介紹
記得那是很多年前卧蜓,我們?nèi)ゾW(wǎng)吧的時(shí)候,都會(huì)用到酷狗音樂把敞,因?yàn)樗锌ɡ璒K歌詞滾動(dòng)弥奸,然后在玩著游戲,開著歌詞顯示到游戲前面感覺逼格很高奋早,那時(shí)候還不知道網(wǎng)易云音樂這軟件其爵,所以當(dāng)就想著卡拉OK歌詞這么神奇,我要是能做出來就好了伸蚯,但是很遺憾那時(shí)才上高中摩渺,也就學(xué)了點(diǎn)C語言寫寫單片機(jī)而已,還寫不出這么高大上的功能剂邮;直到后來上班不知怎么遇到了網(wǎng)易云音樂摇幻,就用上了,也說不出網(wǎng)易云音樂有多好挥萌,甚至連卡拉OK歌詞都沒有绰姻,但是就感覺他的界面做的沒那么復(fù)雜,如果你去看看其他的音樂軟件就會(huì)發(fā)現(xiàn)界面有點(diǎn)復(fù)雜引瀑;雖然后面上班后也會(huì)一些技術(shù)了狂芋,但很遺憾的是上班后根本就沒有時(shí)間,天天都是需求Bug憨栽,不是領(lǐng)導(dǎo)催就是測試催帜矾,不是測試催就是產(chǎn)品催,不是產(chǎn)品催就是UI催...屑柔,周末就更不想寫了屡萤,就想睡覺,現(xiàn)在辭職創(chuàng)業(yè)了也有時(shí)間了掸宛,所以就做這樣一門課程死陆,也來完成我們多年的一個(gè)夢(mèng)想,來寫一個(gè)我的云音樂唧瘾,大體的界面和交互邏輯和網(wǎng)易云音樂類似措译,主要是學(xué)習(xí)和鞏固在Android中如果實(shí)現(xiàn),音樂播放饰序,視頻播放领虹,卡拉OK歌詞,LRC歌詞菌羽,以及桌面歌詞掠械,聊天,動(dòng)態(tài)等功能注祖,這一系列的文章我們會(huì)先后講解Android的實(shí)現(xiàn)猾蒂,iOS的實(shí)現(xiàn),服務(wù)端的實(shí)現(xiàn)是晨,Mac系統(tǒng)的時(shí)候肚菠,Windows系統(tǒng)的實(shí)現(xiàn)等平臺(tái),讓大家能學(xué)習(xí)一個(gè)完整的知識(shí)體系罩缴,雖然學(xué)完以后做不了牛逼的全棧蚊逢,但是你會(huì)體驗(yàn)到每個(gè)平臺(tái),每個(gè)語言的不同和精髓箫章,這對(duì)大家是有幫助的烙荷。
我們這里仿照的版本是Android App 5.2.0.437608。
針對(duì)原版App最大的改進(jìn)就是支持卡拉OK歌詞檬寂,原版App是逐行滾動(dòng)终抽。效果圖如下:
LRC逐行滾動(dòng)歌詞效果如下:
下面就對(duì)我們項(xiàng)目用到了一些技術(shù)和框架做一個(gè)整體介紹,讓大家對(duì)該項(xiàng)目有一個(gè)整體的認(rèn)識(shí):
網(wǎng)絡(luò)框架:OKHttp桶至,選用他的目的是可以通過攔截器很好的擴(kuò)展他昼伴,同時(shí)他也可以很好的配合RxJava和Retrofit這樣的框架來完成請(qǐng)求,但是我們項(xiàng)目中可以只用到了這個(gè)框架的10/1的功能镣屹,所以想深入學(xué)習(xí)的朋友們請(qǐng)學(xué)習(xí)我們的推出的《詳解OkHttp》課程圃郊。
在通知欄顯示請(qǐng)求:chuck-library,用這個(gè)框架是可以從通知欄中查看到每一個(gè)請(qǐng)求女蜈,好處是不需要在電腦上抓包持舆,也不需要給手機(jī)配置代理,特別打測試包時(shí)伪窖,測試人員也能通過這個(gè)看到吏廉,到底是客戶端還是服務(wù)端問題一目了然,還有就是很多時(shí)候服務(wù)端讓你給他發(fā)一個(gè)請(qǐng)求的請(qǐng)求參數(shù)等惰许,用了這個(gè)庫后席覆,給他一個(gè)包,讓他們愛怎么倒騰怎么倒騰汹买,不用每次都找我們開發(fā)人員佩伤,從而專注工作,爭取不加班晦毙。該框架在不會(huì)打包到線上環(huán)境中生巡。效果如下圖:
可以通過Chrome抓包:stetho,該工具是Facebook開源的见妒,可以在Chrome瀏覽器中抓包孤荣,好處是開發(fā)的時(shí)候不用去觸摸到手機(jī),直接在電腦上抓包就行了,畢竟大多數(shù)程序員就很懶盐股,例如我就是钱豁;像微信每次電腦登錄的都的掃碼,想想都心累疯汁,所以就基本不用微信牲尺,明明可以記住密碼。該框架在不會(huì)打包到線上環(huán)境中幌蚊;該庫有個(gè)缺點(diǎn)是依賴Chrome谤碳,還有就是第一次打開抓包界面需要翻墻,所以基于這些點(diǎn)其他人員使用就很麻煩溢豆,而上面哪個(gè)庫就沒這些問題蜒简。
JSON解析:Gson,該框架時(shí)Google開源的,同類的框架有FastJSON,JackSON到他們那個(gè)好瞧捌,我們暫時(shí)還沒做個(gè)相應(yīng)的測試,如果那么朋友知道做個(gè)可以在添加我們的QQ進(jìn)行討論垮兑。
圖片加載框架:Glide,該框架是Google一位員工開發(fā)的漱挎,但不是官方項(xiàng)目系枪,這一點(diǎn)大家要注意,同時(shí)在官方倉庫中也注明了磕谅。該框架有一個(gè)好處就是他可以獲取到當(dāng)前ImageView的尺寸私爷,然后我們可以通過這一點(diǎn)來動(dòng)態(tài)裁剪圖片,例如:一個(gè)列表顯示的圖片尺寸為200PX膊夹,而原圖是1000PX衬浑,所以在列表界面就沒必要加載原圖了,可以直接裁剪成200PX顯示放刨,這樣既省流量加載速度又快工秩,同類框架有Picasso,F(xiàn)resco进统,具體的我們后面會(huì)推出一門關(guān)于Android圖片加載框架的課程助币,會(huì)綜合所有圖片加載框架,先分析源碼螟碎,然后總結(jié)出每個(gè)框架的有點(diǎn)和缺點(diǎn)眉菱,如果有必要可以綜合所有框架有點(diǎn)在打造一個(gè)框架。
Palette:該框架是Android官方提供的調(diào)色板庫掉分,簡單來講就是可以同圖片中提取出多個(gè)顏色俭缓,比如:明亮的克伊,柔和的等,該框架雖然簡單但邏輯還是稍微有一點(diǎn)復(fù)雜华坦,因?yàn)樗麅?nèi)部用到了顏色減值算法愿吹,同時(shí)我們?cè)凇?a target="_blank">詳解Material Design》課程中分析的源碼,還將該框架移植到iOS和Python季春。效果如下圖:
CardView:該框架是Android官方提供的,可以用來實(shí)現(xiàn)圓角和陰影消返,詳細(xì)的使用我們也在《詳解Material Design》課程講解了载弄。效果可以查看下面的,首頁圖撵颊,發(fā)現(xiàn)Banner宇攻,還有Item都是有圓角的效果。
PhotoView:用來手勢縮放圖片倡勇,用在查看專輯大圖時(shí)逞刷。
glide-transformations:該框架是用來結(jié)合Glide使用的一個(gè)圖片處理特效庫,提供了很多動(dòng)畫妻熊,我們這里用到的是高斯模糊效果夸浅,用在播放界面背景效果圖。效果如下圖:
MagicIndicator:用來代替TabLayout實(shí)現(xiàn)指示器效果扔役,因?yàn)門abLayout自定義度要小一點(diǎn)帆喇。在首頁的效果如下圖:
commons-lang3:是Apache開源的一個(gè)常用工具類,同樣在Java中也是經(jīng)常使用亿胸,他提供了ObjectUtils坯钦,RandomUtils,SystemUtils侈玄,StringUtils等工具類婉刀;我們這里用到了StringUtils。
commons-io:同樣還是Apache開源的一個(gè)常用工具類序仙,可以從名字看出來是針對(duì)IO操作的突颊,我們這里用到了FileUtils,因?yàn)榇蠹医?jīng)常用Java就會(huì)發(fā)現(xiàn)Java操作文件很麻煩潘悼,各種類不要太多洋丐,不信你可以隨便找個(gè)做Java幾年的人問,基本上說不出Java中和IO相關(guān)的類和繼承關(guān)系挥等;當(dāng)然我們這里使用了OkHttp友绝,而OkHttp又引用了OkIO,所以你可以通過OkIO來操作文件肝劲,關(guān)于OkIO的部分我們后面會(huì)增加到《詳解OkHttp》課程中迁客。
Emoji:以前的Android版本不支持Emoji郭宝,所以只能自己實(shí)現(xiàn),現(xiàn)在Google提供了兼容庫可以讓我們很方便的實(shí)現(xiàn)掷漱;用在評(píng)論和動(dòng)態(tài)界面粘室。效果如下:
Multidex:使用的是Android官方提供的;當(dāng)然你可以通過Gradle來自己實(shí)現(xiàn)分包卜范。
動(dòng)態(tài)流布局:flow-layout衔统,用來實(shí)現(xiàn)像熱門搜索這類流式布局。效果如下圖:
第三方登錄和分享:第三方登錄使用的是ShareSDK海雪。
LRecyclerView:使用它來實(shí)現(xiàn)對(duì)RecyclerView添加頭部和下來刷新功能锦爵;如果想深入學(xué)習(xí)實(shí)現(xiàn)的朋友可以學(xué)習(xí)《詳解RecyclerView》課程。
下載框架:AndroidDownloader奥裸,這是我們開源的一個(gè)下載框架险掀。效果如下圖:
Toolbar,CoordinatorLayout:可以說CoordinatorLayout是Android Design包中最復(fù)雜控件之一一點(diǎn)兒也不為過湾宙,因?yàn)樗麛U(kuò)展性超強(qiáng)樟氢,詳細(xì)的使用方法和源碼分析在《詳解Material Design》課程中講解了∠丽基本上所有界面都用到了Toolbar埠啃,CoordinatorLayout,但效果就是用戶詳情頁頁面的TabLayout懸停效果伟恶,默認(rèn)如下圖:
TabLayout懸停的效果如下:
數(shù)據(jù)庫:使用了的是LiteOrm霸妹,同類框架有GreenDao他的使用到的類需要每次生成,但是網(wǎng)上的測試都說他效率更高知押,具體的我們暫時(shí)沒有做個(gè)相關(guān)的測試叹螟,OrmLite。
聊天:使用到的融云IM台盯,不帶UI的那種罢绽,因?yàn)榇蟛糠终?qǐng)求下集成聊天都要自定義UI,同時(shí)也只有學(xué)會(huì)了自定義UI如何使用一個(gè)框架静盅,那么以后在集成環(huán)信良价,騰訊IM等框架道理都是一樣的;另外選擇融云是因?yàn)樗蠷uby語言的SDK蒿叠,這樣服務(wù)端實(shí)現(xiàn)就很簡單了明垢。效果如下圖:
日期和時(shí)間:Joda-time,這個(gè)庫在Java項(xiàng)目中使用很多市咽,因?yàn)槿绻憬?jīng)常使用Java自帶的Api來處理日期和時(shí)間你就會(huì)發(fā)現(xiàn)很麻煩痊银,所以說用該框架操作日期和時(shí)間是很方便的,還有一個(gè)點(diǎn)就是時(shí)區(qū)施绎,所以我們服務(wù)端返回的時(shí)間都是ISO8601格式溯革,而不是時(shí)間戳贞绳。
picture_library:用來選擇圖片,同類型的框架有很多致稀,大家可以根據(jù)自己的喜好選擇冈闭,而且選擇圖片難度也不到,所以也可以先學(xué)習(xí)下其他開源框自己在封裝一個(gè)抖单。用在發(fā)送動(dòng)態(tài)和聊天發(fā)送圖片萎攒。
阿里云OSS:用來發(fā)布動(dòng)態(tài)時(shí)上傳圖片,現(xiàn)在很少有應(yīng)用還自己存這些資源矛绘,好處是CDN耍休,緩存等功能,不用擔(dān)心性能和存儲(chǔ)空間不夠蔑歌;同時(shí)他還提供水印羹应,以及圖片處理功能揽碘。
有米廣告SDK:廣告SDK可以說是很多次屠,騰訊,360雳刺,小米都有劫灶;用在啟動(dòng)界面顯示插屏廣告。效果如下圖:
效果的話和原版差不錯(cuò)掖桦,就是這個(gè)廣告畫風(fēng)不太好本昏。
跨界面通訊:這里使用的是EventBus,同類框架有餓了么也開源了一個(gè)枪汪。
Butterknife:用來快速綁定界面上的View和方法涌穆,該框架是基于APT實(shí)現(xiàn),所以大家不要面試不懂千萬不要說雀久,這不就是注解實(shí)現(xiàn)的嗎宿稀。
本課程中不會(huì)涉及到的內(nèi)容,因?yàn)槭潜菊n程這是第一版本赖捌,不會(huì)涉及到MVP祝沸,MVVM,Kotlin等相關(guān)的技術(shù)越庇,后續(xù)我們會(huì)在該課程的基礎(chǔ)上用相應(yīng)的基礎(chǔ)實(shí)現(xiàn)罩锐,第一版要專注實(shí)現(xiàn)核心功能,而不是各種設(shè)計(jì)模式卤唉,各種架構(gòu)涩惑。
注意:框架只是用來提高開發(fā)效率,并不能讓你有多大的提高桑驱,也就說一個(gè)功能或者一個(gè)算法你實(shí)現(xiàn)不了境氢,雖然用框架可能解決了問題蟀拷,但是脫離了框架你就什么都不是了,所以大家平時(shí)還是要多深入學(xué)習(xí)萍聊,而不是僅僅停留在使用框架層面问芬,只有這樣才能讓你走的更遠(yuǎn)。
如果感覺我們寫的不錯(cuò)寿桨,可以支持我們一下此衅,本項(xiàng)目提供的在線電子書和在線視頻教程,在官網(wǎng)購買可以優(yōu)惠5元喲亭螟,同時(shí)視頻課程也可以在網(wǎng)易云課程挡鞍,騰訊課堂上購買,如果有任何問題可以添加我們的QQ來討論:3469271680预烙;評(píng)論可能回復(fù)不是很及時(shí)墨微,還望大家體諒;購買課程后可以獲得一對(duì)一答疑服務(wù)扁掸,當(dāng)然也可以談人生談理想瞎扯淡翘县;同時(shí)如果是零基礎(chǔ)想學(xué)編程的朋友也可以聯(lián)系我們進(jìn)行咨詢,我們可以提供一些建議和幫助谴分,讓你在編程道路上更順暢锈麸。