作者簡(jiǎn)介? 原創(chuàng)微信公眾號(hào)郭霖 WeChat ID: guolin_blog
上了三天班均践,又要放假了堪置,提前祝大家周末愉快!
本篇是馬云飛的第四篇投稿俩莽,分享了自己實(shí)現(xiàn)的刷新加載框架川梅,一個(gè)常見的功能疯兼,希望能夠幫助大家理清其中的相關(guān)知識(shí)點(diǎn)。
馬云飛的博客地址:
http://blog.csdn.net/sw950729
正文
其實(shí)早在去年七月贫途,群里小伙伴就有讓我共享這個(gè)镇防。但我當(dāng)時(shí)絕的技術(shù)不純熟。代碼有bug什么的潮饱。沒(méi)有寫出來(lái)±囱酰現(xiàn)在感覺(jué)整理的差不多了。就寫出來(lái)讓大家看看香拉,有問(wèn)題一起討論解決啦扬。
說(shuō)到刷新加載,我們第一個(gè)想到啥凫碌,對(duì)了就是 swiperefreshlayout扑毡,還有什么 SuperSwiperefreshlayout,XRecyclerView 等等盛险。反正老多了瞄摊,我還是之前那句話,不管用什么苦掘,我們需要知道他的原理换帜。
打造框架開始
對(duì)于刷新加載的實(shí)現(xiàn),你們第一個(gè)想到的是什么鹤啡?是用 swiperefresh 然后在 recyclerview 底部加一個(gè)不同type惯驼?還是用事件攔截呢?那必須是事件攔截啊递瑰,雖然現(xiàn)在 swiperefreshlayout 很火祟牲,基本很多app都能看到他。但是遇到那種坑比公司說(shuō)刷新要用自己公司logo你也沒(méi)轍抖部,對(duì)吧说贝?好了,感覺(jué)得罪了好多公司慎颗,不管他乡恕,我們繼續(xù)换淆。
如果有小伙伴長(zhǎng)期看我博客,應(yīng)該知道我前面有一篇是寫過(guò)事件攔截的几颜。沒(méi)錯(cuò),就是
從源碼角度分析嵌套滑動(dòng)機(jī)制NestedScrolling
http://blog.csdn.net/sw950729/article/details/52129349
對(duì)于 nestedscrolling?不了解的同學(xué)可以看完在繼續(xù)下文讯屈。我們先看下我們的效果圖:
老鐵蛋哭,沒(méi)毛病。下面我介紹如何實(shí)現(xiàn)的涮母。
下拉刷新
首先我們給出如下幾個(gè)參數(shù)谆趾,后面要用:
既然是刷新,我們的滾動(dòng)肯定是在 父view 之前的叛本。所以我們需要在 onNestedPreScroll 這個(gè)方法里面寫上我們所需要改動(dòng)的x沪蓬,y值。
我們需要用 父view 去攔截它来候。我們需要判斷 dy 的值是否大于0跷叉,因?yàn)榇笥?是刷新操作,小于0是加載操作营搅。然后我們需要判斷 recyclerview 是否是縱向的而不是橫向的云挟。
上拉加載
上面我也說(shuō)了 onNestedPreScroll 這個(gè)方法中判斷 dy<0 才是加載操作。所以綜上所述转质,代碼變成了這樣:
最后我們需要在 子view 滑動(dòng)結(jié)束后园欣,實(shí)行如下操作:
其實(shí)最主要的兩個(gè)方法已經(jīng)解決了,其他到?jīng)]什么了休蟹,這邊沸枯,我把 nestedscrolling 的8個(gè)接口的功能和自定義 recyclerview 放出來(lái)。已便大家參考赂弓。希望大家都能實(shí)現(xiàn)自己的刷新加載绑榴。告別 swiperefreshlayout。
添加header和footer
這里我們參考 listview 自帶的 addheaderview 和 addfooterview盈魁。代碼如下:
幾個(gè)接口的實(shí)現(xiàn):
自定義recyclerview
既然是自己寫的刷新加載框架彭沼,總不能還有自定義 layout 中在放個(gè) recyclerview。多麻煩备埃,自定義一個(gè)姓惑,直接放在里面,然后分別放個(gè) header 和 footer按脚,就沒(méi)必要每次有頁(yè)面用到刷新都要寫一個(gè)布局于毙。3個(gè)布局解決整個(gè)項(xiàng)目的刷新和加載。話不多說(shuō)辅搬,代碼如下:
這樣我們變實(shí)現(xiàn)了自己的刷新加載框架唯沮,代碼我已上傳到github:
https://github.com/sw950729/SWPullRecyclerLayout
至于使用方法如下:
jcenter:
compile'com.angel:SWPullRecyclerLayout:1.0.0'
maven:
依舊是那2句話脖旱。不管用什么我們需要知道原理。還有就是有什么不懂的提出來(lái)介蛉∶惹欤可以一起討論。
文章原創(chuàng)作者GuoLin 書籍推薦
郭林大神原創(chuàng)android 書籍:《第一行代碼 android》