Hello,大家好酪穿,我是小帥凳干,今天是第一次寫博客啊,有點(diǎn)小激動(dòng)被济,因?yàn)檫@對(duì)我來(lái)說(shuō)是重要的一步救赐,能走到今天也是很不容易,閑話不多說(shuō)只磷,咱開始今天的主角经磅,瀑布流!
瀑布流就不解釋了钮追,瀑布流的效果大家可以看圖片预厌!
開始正式將項(xiàng)目,首先需要設(shè)置瀑布流效果的實(shí)現(xiàn),recycleviwe ,Glide
compile'com.github.bumptech.glide:glide:3.7.0'
compile'com.android.support:recyclerview-v7:24.2.1'
recycleview其實(shí)功能比listviewi強(qiáng)大,但是要用好就需要花點(diǎn)時(shí)間去研究他
Glide是非常強(qiáng)大的一款圖片框架,建議用Glide而不是用Picasso,因?yàn)镚lide能做的比Picasso要更多,而且是谷歌推薦的,所以推薦下;
recycleview 實(shí)現(xiàn)瀑布流布局其實(shí)很簡(jiǎn)單,看代碼
這樣就已經(jīng)實(shí)現(xiàn)了瀑布流的功能,后面的就交給adpter去了
不得不吐槽的是recycleview這么強(qiáng)大,竟然要自己定義點(diǎn)擊事件!
so 跟著我看下代碼
具體的綁定需要在onBindViewHolder與定制的holder去綁定,通過(guò)監(jiān)聽點(diǎn)擊事件綁定,這里我們的Glide就登場(chǎng)了
ok,既然講到了Glide,來(lái)講講GlideModule 如果你沒有遇到GlideModule,那么你還沒真正會(huì)用Glide,當(dāng)然我也不太會(huì),我就把我知道的寫寫;
這里需要接下的兩個(gè)方法,第一個(gè)方法簡(jiǎn)單說(shuō)就是自定義Glide,里面可以定義緩存,內(nèi)存和SD卡,
SD卡里面分兩種情況,一種是內(nèi)部緩存,外部訪問(wèn)不到,也就是Data data里面的數(shù)據(jù),另外一種就是放在可以訪問(wèn)到,需要了解詳情的去官網(wǎng)看看https://github.com/bumptech/glide
第二個(gè)方法registerComponents 是網(wǎng)絡(luò)請(qǐng)求,我這里沒有配置okhttp,因?yàn)樾枰脑捰质且黄恼?
GlideModule聲明后需要用meta-data調(diào)用,如圖
ok,接下來(lái)看看如何實(shí)現(xiàn)瀑布流的隨機(jī)高度
很簡(jiǎn)答吧,就這一句話,當(dāng)然你也可以寫在適配器里面
這里是對(duì)高度的解析,順帶提下,你的布局文件里面,需要設(shè)置下
不解釋這個(gè),去看recycleview的源碼,或者你自己寫寫試試看就知道了
這樣就簡(jiǎn)單實(shí)現(xiàn)了瀑布流的效果,數(shù)據(jù)的解析我后期會(huì)開一篇文章去解析
本文數(shù)據(jù)是寫死的;
當(dāng)然實(shí)現(xiàn)瀑布流不能放大和縮小是不是很坑,所以我們的另外一個(gè)主角photoview就登場(chǎng)了
https://github.com/chrisbanes/PhotoView
配置我是引入了jar,當(dāng)然也可以用官網(wǎng)的配置說(shuō)明
第一次寫不知道怎么把jar包發(fā)在網(wǎng)上啊,那給個(gè)百度云鏈接唄
鏈接:http://pan.baidu.com/s/1skEAefV 密碼:ejve
怎么依賴就不寫了,自己解決;
photoview的使用和imagview是差不多的
帶個(gè)進(jìn)度條,好通知下,進(jìn)度條這里當(dāng)時(shí)卡了下,不過(guò)解決了
之前寫了一個(gè)單張圖片的效果,后來(lái)感覺不行,就寫了viewpager,
提下viewpager的適配器吧
里面的注釋寫的很清楚了,viewpage和recycleview結(jié)合起來(lái)對(duì)比下,你就能知道他們的不同
這里強(qiáng)烈推薦大家去閱讀下這篇博客,對(duì)viewpage有一個(gè)很好的認(rèn)知http://blog.csdn.net/dmk877/article/details/50060745
或者去官網(wǎng)查看下,閱讀官網(wǎng)是一種習(xí)慣,備好梯子
接下來(lái)說(shuō)說(shuō)怎么傳遞數(shù)據(jù)
intent是主角,不過(guò)我在實(shí)際做的時(shí)候發(fā)現(xiàn)intent不支持int數(shù)據(jù)傳遞,哈哈,你沒遇到過(guò)說(shuō)明你開發(fā)經(jīng)驗(yàn)不夠哦,遇到問(wèn)題要去解決嗎,答案是有很多的,我用最簡(jiǎn)單的一種,bundle
通過(guò)bundle去傳遞數(shù)據(jù)
接下來(lái)有了數(shù)據(jù)就是viewpager的適配,這里就不解釋了,看代碼就行
需要提下的是進(jìn)度條
這里基本實(shí)現(xiàn)了需要的效果了!可以看下斷網(wǎng)情況下加載哦
差點(diǎn)忘了,項(xiàng)目地址 ??https://github.com/Chenshuai770/test_glide6
我是小帥!