PullToRefresh

1. 導(dǎo)入庫(kù)

clone:https://github.com/chrisbanes/Android-PullToRefresh.git
可以把 library 文件夾重命名為 PullToRefresh。
Android Studio 中 File => New => Import Module损趋,導(dǎo)入 PullToRefresh 文件夾度液。

dependencies {
    ......
    compile project(':pullToRefresh')
}

還要把自己工程和 PullToRefresh 的 build.gradle 文件里的版本統(tǒng)一:

android {
    compileSdkVersion 24
    buildToolsVersion "23.0.2"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 24
    }

Rubuild 后就能用了巨朦。

2. 簡(jiǎn)單使用

    <!--The PullToRefreshListView replaces a standard ListView widget.
    The ID CAN NOT be @+id/android:list-->
    <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:id="@+id/pull_to_refresh_listview"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent" />
    // Set a listener to be invoked when the list should be refreshed.
    PullToRefreshListView pullToRefreshView = (PullToRefreshListView) findViewById(R.id.pull_to_refresh_listview);
    pullToRefreshView.setOnRefreshListener(new OnRefreshListener<ListView>() {
        @Override
        public void onRefresh(PullToRefreshBase<ListView> refreshView) {
            // Do work to refresh the list here.
            new GetDataTask().execute();
        }
    });

    private class GetDataTask extends AsyncTask<Void, Void, String[]> {
        ...
        @Override
        protected void onPostExecute(String[] result) {
            // Call onRefreshComplete when the list has been refreshed.
            pullToRefreshView.onRefreshComplete();
            super.onPostExecute(result);
        }
    }
  • 得到 View 的實(shí)例:getRefreshableView()

3. 自定義 PullToRefresh View

  • PullToRefresh 只支持以下 View:

  • ListView

  • ExpandableListView

  • GridView

  • WebView

  • ScrollView

  • HorizontalScrollView

  • ViewPager

  • 如 RecyclerView出吹、NestedScrollView 等跌榔,可以自己封裝一個(gè)。

1. 新建類繼承 PullToRefreshBase
2. 復(fù)寫(xiě)幾個(gè)構(gòu)造方法
3. 復(fù)寫(xiě)四個(gè)重要抽象方法
public class PullToRefreshNestedScrollView extends PullToRefreshBase<NestedScrollView> {

    public PullToRefreshNestedScrollView(Context context) {
        super(context);
    }

    public PullToRefreshNestedScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public PullToRefreshNestedScrollView(Context context, Mode mode) {
        super(context, mode);
    }

    public PullToRefreshNestedScrollView(Context context, Mode mode, AnimationStyle animStyle) {
        super(context, mode, animStyle);
    }

    //  滑動(dòng)方向
    //  Orientation.VERTICAL、Orientation.HORIZONTAL
    @Override
    public Orientation getPullToRefreshScrollDirection() {
        return Orientation.VERTICAL;
    }

    //  滑動(dòng)的 View
    //  創(chuàng)建一個(gè)想應(yīng)用于的 View 的實(shí)例就行
    @Override
    protected NestedScrollView createRefreshableView(Context context, AttributeSet attrs) {
        return new MyNestedScrollView(context, attrs);
    }

    //  判斷是否滑動(dòng)到底部了测蹲,返回 true 就會(huì)執(zhí)行上拉加載
    @Override
    protected boolean isReadyForPullEnd() {
        //  寫(xiě)判斷邏輯
        return false;
    }

    //  判斷是否滑動(dòng)到頂部了,返回 true 就會(huì)執(zhí)行下拉刷新
    @Override
    protected boolean isReadyForPullStart() {
        //  寫(xiě)判斷邏輯
        return false;
    }
}

4. 自定義屬性

res/values/attrs.xml 中:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="PullToRefresh">

        <!-- 設(shè)置刷新列表的背景色 -->
        <attr name="ptrRefreshableViewBackground" format="reference|color" />

        <!-- 設(shè)置下拉Header或者上拉Footer的背景色 -->
        <attr name="ptrHeaderBackground" format="reference|color" />

        <!-- 用于設(shè)置Header與Footer中文本的顏色 -->
        <attr name="ptrHeaderTextColor" format="reference|color" />

        <!-- 用于設(shè)置Header與Footer中上次刷新時(shí)間文本的顏色 -->
        <attr name="ptrHeaderSubTextColor" format="reference|color" />

        <!-- 刷新模式 -->
        <attr name="ptrMode">
            <flag name="disabled" value="0x0" /> <!-- 禁用下拉刷新 -->
            <flag name="pullFromStart" value="0x1" /> <!-- 僅支持下拉刷新 -->
            <flag name="pullFromEnd" value="0x2" /> <!-- 僅支持上拉刷新 -->
            <flag name="both" value="0x3" /> <!-- 上拉刷新和下拉刷新都支持 -->
            <flag name="manualOnly" value="0x4" /> <!-- 只允許手動(dòng)觸發(fā) -->

            <!-- These last two are depreacted -->
            <flag name="pullDownFromTop" value="0x1" />
            <flag name="pullUpFromBottom" value="0x2" />
        </attr>

        <!-- 如果為true會(huì)在mPullRefreshListView中出現(xiàn)icon鬼吵,右上角和右下角扣甲,挺有意思的 -->
        <attr name="ptrShowIndicator" format="reference|boolean" />

        <!-- 同時(shí)改變頭部和底部的刷新圖標(biāo) -->
        <attr name="ptrDrawable" format="reference" />

        <!-- 頭部視圖的刷新圖標(biāo) -->
        <attr name="ptrDrawableStart" format="reference" />

        <!-- 底部視圖的刷新圖標(biāo) -->
        <attr name="ptrDrawableEnd" format="reference" />
        <attr name="ptrOverScroll" format="reference|boolean" />

        <!-- 分別設(shè)置拉Header或者上拉Footer中字體的類型顏色等等 -->
        <attr name="ptrHeaderTextAppearance" format="reference" />
        <attr name="ptrSubHeaderTextAppearance" format="reference" />

        <!-- flip(翻轉(zhuǎn)動(dòng)畫(huà)), rotate(旋轉(zhuǎn)動(dòng)畫(huà)) -->
        <attr name="ptrAnimationStyle">
            <flag name="rotate" value="0x0" />
            <flag name="flip" value="0x1" />
        </attr>

        <!-- 刷新的時(shí)候齿椅,是否允許ListView或GridView滾動(dòng) -->
        <attr name="ptrScrollingWhileRefreshingEnabled" format="reference|boolean" />

        <!-- 決定了Header琉挖,F(xiàn)ooter以何種方式加入mPullRefreshListView,true為headView方式加入涣脚,就是滾動(dòng)時(shí)刷新頭部會(huì)一起滾動(dòng),false不能刷新 -->
        <attr name="ptrListViewExtrasEnabled" format="reference|boolean" />

        <!-- 拉的時(shí)候頭部或者尾部的刷新圖片示辈,是否多次旋轉(zhuǎn),true多次遣蚀,false只是旋轉(zhuǎn)一周矾麻,在下拉,圖片不會(huì)在跟著旋轉(zhuǎn) -->
        <attr name="ptrRotateDrawableWhilePulling" format="reference|boolean" />

        <!-- BELOW HERE ARE DEPRECEATED. DO NOT USE. -->
        <attr name="ptrAdapterViewBackground" format="reference|color" />
        <attr name="ptrDrawableTop" format="reference" />
        <attr name="ptrDrawableBottom" format="reference" />

    </declare-styleable>
</resources>
使用方法:
  1. 在布局文件頭部加入xmlns:ptr="http://schemas.android.com/apk/res-auto"
  2. 在 PullToRefreshView 節(jié)點(diǎn)使用ptr:ptrMode="both"等進(jìn)行設(shè)置芭梯。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末险耀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子粥帚,更是在濱河造成了極大的恐慌胰耗,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芒涡,死亡現(xiàn)場(chǎng)離奇詭異柴灯,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)费尽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門赠群,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人旱幼,你說(shuō)我怎么就攤上這事查描。” “怎么了柏卤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵冬三,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我缘缚,道長(zhǎng)勾笆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任桥滨,我火速辦了婚禮窝爪,結(jié)果婚禮上弛车,老公的妹妹穿的比我還像新娘。我一直安慰自己蒲每,他們只是感情好纷跛,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著邀杏,像睡著了一般贫奠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淮阐,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天叮阅,我揣著相機(jī)與錄音刁品,去河邊找鬼泣特。 笑死,一個(gè)胖子當(dāng)著我的面吹牛挑随,可吹牛的內(nèi)容都是我干的状您。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼兜挨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼膏孟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起拌汇,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤柒桑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后噪舀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體魁淳,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年与倡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了界逛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纺座,死狀恐怖息拜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情净响,我是刑警寧澤少欺,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站馋贤,受9級(jí)特大地震影響赞别,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掸掸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一氯庆、第九天 我趴在偏房一處隱蔽的房頂上張望蹭秋。 院中可真熱鬧,春花似錦堤撵、人聲如沸仁讨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)洞豁。三九已至,卻和暖如春荒给,著一層夾襖步出監(jiān)牢的瞬間丈挟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工志电, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留曙咽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓挑辆,卻偏偏與公主長(zhǎng)得像例朱,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鱼蝉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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