給SwipeRefreshLayout添加加載更多功能

github地址


下拉刷新,滑動到底部加載更多是App中很常見的功能缺前,github上也有很多這樣的開源庫提供這樣的功能会放,但大多數(shù)是在listview,recycleview等列表類上面做了一層包裝盖腿,后來google推出了官方的刷新組件SwipeRefreshLayout,SwipeRefreshLayout是Android開發(fā)功常用的一個組件,使用起來很方便愈捅,但是沒有加載更多這個功能遏考,是否可以對SwipeRefreshLayout做些改動,使其能夠支持加載更多呢蓝谨,答案是肯定的灌具。

首先對SwipeRefreshLayout進(jìn)行分析:

public class SwipeRefreshLayout extends ViewGroup implements NestedScrollingParent,
        NestedScrollingChild 
  • 可以看到SwipeRefreshLayout實(shí)現(xiàn)了NestedScrollingParent,NestedScrollingChild這兩個接口,這兩個接口是實(shí)現(xiàn)組件之間協(xié)同滑動的重要接口譬巫,使用也不麻煩主要用到NestedScrollingParentHelper 咖楣,NestedScrollingChildHelper這兩個幫助類。
  • 對于不支持NestedScrolling的view SwipeRefreshLayout采用攔截滑動事件缕题,判斷是否需要刷新截歉。
  • 刷新的動畫則是一個圓形的ImageView加一個圓形的progressDrawable,通過一系列的Animation完成的,這部分代碼可以拷貝出來直接使用烟零。


    大概思路

有了大概思路之后就可以開始寫代碼了

  1. 新建類繼承ViewGroup,并實(shí)現(xiàn)NestScrollingParent,NestScrollingChild
  2. 在NestScrollingParent和onInterceptTouchEvent中對用戶的手勢操作做判斷瘪松。
  3. refresh,loadmore的顯示與消失的處理
  4. 數(shù)據(jù)全部加載完成咸作,沒有更多時的顯示

遇到的問題及解決辦法

fling時滑動到底部loadmore的顯示

因?yàn)橹皩iew的滑動沒有太了解,所以在判斷SwipeRefrshPlush中的子view是否滑動到底部時不知道該如何下手宵睦,最后還是賊SwipeRefreshLayout的源碼中找到了解決方法

  public boolean canChildScrollDown() {
    if (android.os.Build.VERSION.SDK_INT < 14) {
        if (mTarget instanceof AbsListView) {
            final AbsListView absListView = (AbsListView) mTarget;
            int count = absListView.getChildCount();
            int position = absListView.getLastVisiblePosition();
            return (count > position + 1) || absListView.getChildAt(position).getBottom() <=absListView.getPaddingBottom();
        } else {
            return ViewCompat.canScrollVertically(mTarget, 1);
        }
    } else {
        return ViewCompat.canScrollVertically(mTarget, 1);
    }
}  

refresh或loadmore動畫正在顯示時fragment切換導(dǎo)致重疊

這個問題在SwipeRefreshLayout中也存在记罚,不過以前一直沒發(fā)現(xiàn),導(dǎo)致這個問題出現(xiàn)的原因是ProgressDrawable中使用的是Animation動畫壳嚎,后來將ProgressDrawable中的動畫改為Animator動畫桐智,這個問題就得到了解決。

效果圖

功能及使用

使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烟馅,一起剝皮案震驚了整個濱河市说庭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌郑趁,老刑警劉巖刊驴,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異寡润,居然都是意外死亡捆憎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門梭纹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躲惰,“玉大人,你說我怎么就攤上這事变抽〈〔Γ” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵瞬沦,是天一觀的道長太伊。 經(jīng)常有香客問我雇锡,道長逛钻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任锰提,我火速辦了婚禮曙痘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘立肘。我一直安慰自己边坤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布谅年。 她就那樣靜靜地躺著茧痒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪融蹂。 梳的紋絲不亂的頭發(fā)上旺订,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天弄企,我揣著相機(jī)與錄音,去河邊找鬼区拳。 笑死拘领,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的樱调。 我是一名探鬼主播约素,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼笆凌!你這毒婦竟也來了圣猎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤乞而,失蹤者是張志新(化名)和其女友劉穎样漆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晦闰,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡放祟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了呻右。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跪妥。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖声滥,靈堂內(nèi)的尸體忽然破棺而出眉撵,到底是詐尸還是另有隱情,我是刑警寧澤落塑,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布纽疟,位于F島的核電站,受9級特大地震影響憾赁,放射性物質(zhì)發(fā)生泄漏污朽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一龙考、第九天 我趴在偏房一處隱蔽的房頂上張望蟆肆。 院中可真熱鬧,春花似錦晦款、人聲如沸炎功。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛇损。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淤齐,已是汗流浹背束世。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留床玻,地道東北人毁涉。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像锈死,于是被迫代替她去往敵國和親贫堰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容