Android下拉刷新筒严,上拉加載——Ultra-Pull-To-Refresh-With-Load-More(一)

個人博客:haichenyi.com丹泉。感謝關(guān)注

簡介

Android里面刷新和分頁加載是常見的,刷新有Google的SwipeRefreshLayout鸭蛙,但是UI不同意摹恨,非要跟IOS一樣,那就沒辦法了娶视。

開源框架鏈接:Ultra-Pull-To-Refresh-With-Load-More晒哄。這個開源框架是基于Ultra-Pull-To-Refresh拓展了一個上拉加載功能。

作者:廖祜秋

依賴


implementation 'in.srain.cube:ptr-load-more:1.0.6'

用法

整個項目就只有一個核心類:PtrFrameLayout肪获,繼承ViewGroup寝凌。步驟:

  1. xml里面定義控件PtrFrameLayout

  2. 設(shè)置相關(guān)屬性

  3. 添加Header,F(xiàn)ooter孝赫,并監(jiān)聽

  4. 監(jiān)聽刷新過程

第一步:xml里面定義控件PtrFrameLayout

<?xml version="1.0" encoding="utf-8"?>
<in.srain.cube.views.ptr.PtrFrameLayout
    android:id="@+id/ptr_frame_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:cube_ptr="http://schemas.android.com/apk/res-auto"

    cube_ptr:ptr_resistance_header="1.7"
    cube_ptr:ptr_ratio_of_header_height_to_refresh="1.2"
    cube_ptr:ptr_duration_to_back_header="300"
    cube_ptr:ptr_duration_to_close_header="2000"
    cube_ptr:ptr_keep_header_when_refresh="true"
    cube_ptr:ptr_pull_to_fresh="false"

    cube_ptr:ptr_resistance_footer="1.3"
    cube_ptr:ptr_duration_to_back_footer="300"
    cube_ptr:ptr_duration_to_close_footer="2000">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/colorAccent"
            android:gravity="center"
            android:text="textView"/>
    </LinearLayout>
</in.srain.cube.views.ptr.PtrFrameLayout>

上面就是一個簡單的布局较木,根布局是 PtrFrameLayout ,他的子View可以是任意view青柄。

第二步:設(shè)置相關(guān)屬性

我們也看到了伐债,他的布局里面有一些自定義屬性,可以在布局里面設(shè)置致开,也可以在java代碼里面設(shè)置峰锁,相關(guān)屬性含義如下:

  1. Resistence:阻尼系數(shù),可以分別設(shè)置header和footer双戳。默認(rèn): 1.7f虹蒋,越大,感覺下拉刷新時越吃力飒货。上拉加載也是一樣的

  2. Ratio of the Height of the Header to Refresh:觸發(fā)刷新時移動的位置比例魄衅。
    默認(rèn),1.2f塘辅,移動達(dá)到頭部高度1.2倍時可觸發(fā)刷新操作晃虫。下拉刷新,上拉加載都一樣莫辨。

  3. Duration to Close back:回彈延時。默認(rèn) 200ms毅访,回彈到刷新或者高度所用時間沮榜,可以跟上面一樣分開設(shè)置,也可以設(shè)置一個

  4. Duration to Close Header:刷新完成之后隱藏頭部的時間喻粹。默認(rèn)1000mscube_ptr:ptr_duration_to_close_either="2000"

  5. Keep Header while Refreshing:刷新是保持頭部蟆融,也就是顯示頭部。默認(rèn)值 true守呜。false:隱藏頭部

  6. Pull to Refresh / Release to Refresh:下拉刷新 / 釋放刷新型酥。
    默認(rèn)為釋放的時候刷新

在java代碼中設(shè)置方式如下:

final PtrFrameLayout ptrFrameLayout = findViewById(R.id.ptr_frame_layout);
//配置頭部參數(shù),可以在xml中設(shè)置
// the following are default settings
    ptrFrameLayout.setResistance(1.7f);
    ptrFrameLayout.setRatioOfHeaderHeightToRefresh(1.2f);
    ptrFrameLayout.setDurationToClose(200);
    ptrFrameLayout.setDurationToCloseHeader(1000);
// default is false
    ptrFrameLayout.setPullToRefresh(false);
// default is true
    ptrFrameLayout.setKeepHeaderWhenRefresh(true);

第三步:添加Header山憨,F(xiàn)ooter,并監(jiān)聽

//第一種頭部,StoreHouse風(fēng)格的頭部實(shí)現(xiàn)
    /*StoreHouseHeader storeHouseHeader = new StoreHouseHeader(this);
    storeHouseHeader.setPadding(0,100,0,0);
    storeHouseHeader.setBackgroundColor(Color.BLACK);
    storeHouseHeader.setTextColor(Color.WHITE);
    storeHouseHeader.initWithString("haichenyi");//只可英文弥喉,中文不可運(yùn)行(添加時間)
    ptrFrameLayout.setHeaderView(storeHouseHeader);
    ptrFrameLayout.addPtrUIHandler(storeHouseHeader);*/

    //第二種頭部,Material Design風(fēng)格的頭部實(shí)現(xiàn),類似SwipeRefreshLayout
    /*MaterialHeader materialHeader = new MaterialHeader(this);
    materialHeader.setColorSchemeColors(new int[]{Color.RED, Color.GREEN, Color.BLUE});
    ptrFrameLayout.setHeaderView(materialHeader);
    ptrFrameLayout.addPtrUIHandler(materialHeader);*/


    //第三種頭部,經(jīng)典 風(fēng)格的頭部實(shí)現(xiàn)郁竟,下拉箭頭+時間
    PtrClassicDefaultHeader ptrClassicDefaultHeader = new PtrClassicDefaultHeader(this);
    ptrFrameLayout.setHeaderView(ptrClassicDefaultHeader);

    PtrClassicDefaultFooter ptrClassicDefaultFooter = new PtrClassicDefaultFooter(this);
    ptrFrameLayout.setFooterView(ptrClassicDefaultFooter);

    ptrFrameLayout.addPtrUIHandler(ptrClassicDefaultHeader);
    ptrFrameLayout.addPtrUIHandler(ptrClassicDefaultFooter);

如上面代碼所示,Header由境,F(xiàn)ooter的種類是一樣的棚亩,Header有三種,F(xiàn)ooter也有三種虏杰,定義好之后讥蟆,通過 setHeaderView(), setFooterView() 添加到 ptrFrameLayout 中,然后通過調(diào)用 addPtrUIHandler 監(jiān)聽兩者的狀態(tài)即可纺阔。不監(jiān)聽會顯示空白瘸彤,看不到具體內(nèi)容

第四步:監(jiān)聽刷新過程

ptrFrameLayout.setPtrHandler(new PtrDefaultHandler2() {
      @Override
      public void onLoadMoreBegin(PtrFrameLayout frame) {
        frame.postDelayed(ptrFrameLayout::refreshComplete, 2000);
      }

      @Override
      public void onRefreshBegin(PtrFrameLayout frame) {
        frame.postDelayed(ptrFrameLayout::refreshComplete, 2000);
      }
    });
    ptrFrameLayout.setMode(PtrFrameLayout.Mode.LOAD_MORE);

通過設(shè)置 setPtrHandler() 方法監(jiān)聽刷新過程。默認(rèn)的是 PtrDefaultHandler2(),它是后來加的笛钝,包括刷新和加載质况。PtrDefaultHandler() 只包含刷新功能。通過setMode()方法設(shè)置:只要下拉刷新婆翔,或者只要上拉加載拯杠,或者兩者都要。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啃奴,一起剝皮案震驚了整個濱河市潭陪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌最蕾,老刑警劉巖依溯,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瘟则,居然都是意外死亡黎炉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門醋拧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慷嗜,“玉大人,你說我怎么就攤上這事丹壕∏煨担” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵菌赖,是天一觀的道長缭乘。 經(jīng)常有香客問我,道長琉用,這世上最難降的妖魔是什么堕绩? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任策幼,我火速辦了婚禮,結(jié)果婚禮上奴紧,老公的妹妹穿的比我還像新娘特姐。我一直安慰自己,他們只是感情好绰寞,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布到逊。 她就那樣靜靜地躺著,像睡著了一般滤钱。 火紅的嫁衣襯著肌膚如雪觉壶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天件缸,我揣著相機(jī)與錄音铜靶,去河邊找鬼。 笑死他炊,一個胖子當(dāng)著我的面吹牛争剿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播痊末,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼蚕苇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凿叠?” 一聲冷哼從身側(cè)響起涩笤,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盒件,沒想到半個月后蹬碧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炒刁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年恩沽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翔始。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡罗心,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出城瞎,到底是詐尸還是另有隱情渤闷,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布全谤,位于F島的核電站肤晓,受9級特大地震影響爷贫,放射性物質(zhì)發(fā)生泄漏认然。R本人自食惡果不足惜补憾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卷员。 院中可真熱鬧盈匾,春花似錦、人聲如沸毕骡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽未巫。三九已至窿撬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叙凡,已是汗流浹背劈伴。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留握爷,地道東北人跛璧。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像新啼,于是被迫代替她去往敵國和親追城。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

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