強(qiáng)大的Android刷新庫-SmoothRefreshLayout

SmoothRefreshLayout

English | 中文

一個(gè)高效的Android刷新庫,理論上支持所有的視圖,比官方的SwipeRefreshLayout更強(qiáng)大且使用方便.
本開源庫的部分代碼來自android-Ultra-Pull-To-Refresh.
非常感謝他提供的這么棒的開源項(xiàng)目!

特性:

  • 理論上支持所有的視圖,且可根據(jù)具體需求高效適配.
  • 支持多點(diǎn)觸摸.
  • 支持嵌套滑動(dòng),完整實(shí)現(xiàn)了NestedScrollingChild,NestedScrollingParent 接口,玩轉(zhuǎn)CoordinatorLayout.
  • 直接繼承自ViewGroup,擁有卓越的性能,支持類FameLayout的特性(Gravity、Margin).
  • 支持自動(dòng)刷新、自動(dòng)上拉加載、到底自動(dòng)加載更多(不推薦,建議使用Adapter實(shí)現(xiàn),可自定義到底判斷邏輯回調(diào)實(shí)現(xiàn)預(yù)加載更多).
  • 支持越界回彈.
  • 支持刷新視圖自定樣式:STYLE_DEFAULT(默認(rèn)不改變大小)、STYLE_SCALE(動(dòng)態(tài)改變大小,一直會(huì)重測量并布局,所以性能會(huì)有損失)、STYLE_PIN(不會(huì)改變視圖大小,固定在頂部或者底部)、STYLE_FOLLOW_SCALE(先縱向跟隨移動(dòng)并且不改變視圖大小,大于視圖高度后動(dòng)態(tài)改變視圖大小且性能會(huì)有損失)、STYLE_FOLLOW_PIN(不會(huì)改變視圖大小,先縱向跟隨移動(dòng),大于視圖高度后固定)、STYLE_FOLLOW_CENTER(不會(huì)改變視圖大小,先縱向跟隨移動(dòng),大于視圖高度后讓視圖保持在移動(dòng)的距離中心點(diǎn)).
  • 支持二級(jí)刷新事件(TwoLevelSmoothRefreshLayout),PS:淘寶二樓、京東活動(dòng).
  • 支持橫向刷新(HorizontalSmoothRefreshLayout).
  • 支持ListView、GridView、RecyclerView加載更多的同步平滑滾動(dòng).
  • 支持多狀態(tài)視圖:STATE_CONTENT(默認(rèn)狀態(tài))、STATE_ERROR(異常狀態(tài))、STATE_EMPTY(空狀態(tài))、STATE_CUSTOM(自定義狀態(tài)).
  • 支持手勢:同步Fling(刷新視圖仍可見的情況下,會(huì)先回滾隱藏刷新視圖,而后向下傳遞Fling手勢).
  • 支持作為可拉伸內(nèi)部視圖布局使用(類小米設(shè)置頁效果).
  • 豐富的回調(diào)接口和調(diào)試信息,可利用現(xiàn)有API實(shí)現(xiàn)豐富的效果.

演示程序

下載 Demo.apk

更新日志

老版本升級(jí)務(wù)必查看

更新日志

快照

  • 測試?yán)焓湛s效果(1.6.2版本添加)

    test_scale_effect.gif

  • 測試橫向拉伸收縮效果(1.6.2版本添加)

    test_horizontal_scale_effect.gif

  • 測試橫向刷新(1.5.0版本添加)

    test_horizontal_refresh.gif

  • 測試橫向RecyclerView刷新(1.5.0版本添加)

    test_horizontal_recyclerView.gif

  • 測試多方向布局下的刷新

    test_multi_direction_views.gif

  • 測試QQ瀏覽器樣式

    test_qq_web_browser_style.gif

  • 測試QQ活動(dòng)樣式

    test_qq_style.gif

  • 測試2級(jí)刷新

    test_two_level_refresh.gif

  • 包含ListView

    with_listView.gif

  • 包含RecyclerView

    with_recyclerView.gif

  • 包含ViewPager

    with_viewPager.gif

  • CoordinatorLayout

    with_recyclerView_in_coordinatorLayout.gif

  • 越界回彈模式

    test_overScroll.gif

  • 測試嵌套滑動(dòng)

    test_nested_scroll.gif

使用

Gradle

repositories {
    ...
    maven { url 'https://jitpack.io' }
}

dependencies {
    //核心基礎(chǔ)庫,包含絕大多數(shù)功能,擴(kuò)展庫必須依賴本庫(從1.6.0版本開始Core庫不再自帶刷新視圖實(shí)現(xiàn),只包含核心功能)
    compile 'com.github.dkzwm.SmoothRefreshLayout:core:1.6.3.2'
    //默認(rèn)Classic樣式的刷新視圖實(shí)現(xiàn)庫(從1.6.0版本才有,是從老版本的Core庫中拆分出來的庫)
    compile 'com.github.dkzwm.SmoothRefreshLayout:ext-classic:1.6.3.2'
    //默認(rèn)Material樣式的刷新視圖實(shí)現(xiàn)庫(從1.6.0版本才有,是從老版本的Core庫中拆分出來的庫)
    compile 'com.github.dkzwm.SmoothRefreshLayout:ext-material:1.6.3.2'
    //工具類庫,帶有一些快捷配置工具(自動(dòng)滾動(dòng)刷新工具,快速設(shè)置AppBarLayout工具)
    compile 'com.github.dkzwm.SmoothRefreshLayout:ext-utils:1.6.3.2'
    //擴(kuò)展支持二級(jí)刷新庫
    compile 'com.github.dkzwm.SmoothRefreshLayout:ext-two-level:1.6.3.2'
    //擴(kuò)展支持橫向刷新庫
    compile 'com.github.dkzwm.SmoothRefreshLayout:ext-horizontal:1.6.3.2'
}

在Xml中配置

<?xml version="1.0" encoding="utf-8"?>
<me.dkzwm.widget.srl.SmoothRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/refreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</me.dkzwm.widget.srl.SmoothRefreshLayout>

Java代碼配置

SmoothRefreshLayout refreshLayout = (SmoothRefreshLayout)findViewById(R.id.smoothRefreshLayout);
refreshLayout.setHeaderView(new ClassicHeader(this));
refreshLayout.setOnRefreshListener(new RefreshingListenerAdapter() {
    @Override
    public void onRefreshBegin(boolean isRefresh) {
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                refreshLayout.refreshComplete();
            }
        }, 4000);
    }
});

自定義刷新視圖

接口定義
public interface IRefreshView <T extends IIndicator> {    

    byte TYPE_HEADER = 0;
    byte TYPE_FOOTER = 1;

    byte STYLE_DEFAULT = 0;
    byte STYLE_SCALE = 1;
    byte STYLE_PIN = 2;
    byte STYLE_FOLLOW_SCALE = 3;
    byte STYLE_FOLLOW_PIN = 4;
    byte STYLE_FOLLOW_CENTER = 5;

    /**
     * 返回是頭部視圖還是尾部視圖;
     */
    int getType();

    /**
     * 一般情況都是View實(shí)現(xiàn)本接口,所以返回this;
     */
    View getView();

    /**
     * 獲取視圖樣式,自1.4.8版本后支持6種樣式,STYLE_DEFAULT、STYLE_SCALE、STYLE_PIN、STYLE_FOLLOW_SCALE、STYLE_FOLLOW_PIN、STYLE_FOLLOW_CENTER;
     */
    int getStyle();

    /**
     * 獲取視圖的自定義高度,當(dāng)視圖樣式為STYLE_SCALE和STYLE_FOLLOW_SCALE時(shí),必須返回一個(gè)確切且大于0的值,使用橫向刷新庫時(shí),該屬性實(shí)際應(yīng)該返回的是視圖的寬度;
     * 自1.6.1版本開始,如果想要當(dāng)前視圖鋪滿布局即MATCH_PARENT,那么支持返回ViewGroup.LayoutParams.MATCH_PARENT對(duì)應(yīng)的值即`-1`;
     */
    int getCustomHeight();

    /**
     * 手指離開屏幕;
     */
    void onFingerUp(SmoothRefreshLayout layout, T indicator);

    /**
     * 重置視圖;
     */
    void onReset(SmoothRefreshLayout layout);

    /**
     * 重新配置視圖,準(zhǔn)備刷新;
     */
    void onRefreshPrepare(SmoothRefreshLayout layout);

    /**
     * 開始刷新;
     */
    void onRefreshBegin(SmoothRefreshLayout layout, T indicator);

    /**
     * 刷新完成;
     */
    void onRefreshComplete(SmoothRefreshLayout layout,boolean isSuccessful);

    /**
     * 當(dāng)頭部或者尾部視圖發(fā)生位置變化;
     */
    void onRefreshPositionChanged(SmoothRefreshLayout layout, byte status, T indicator);

    /**
     * 當(dāng)頭部或者尾部視圖仍然處于處理事務(wù)中,這時(shí)候移動(dòng)其他刷新視圖則會(huì)調(diào)用該方法;
     * 在1.4.6版本新加入;
     */
    void onPureScrollPositionChanged(SmoothRefreshLayout layout, byte status, T indicator);
}
添加自定義刷新視圖
  • 全局靜態(tài)代碼構(gòu)造
        SmoothRefreshLayout.setDefaultCreator(new IRefreshViewCreator() {
            @Override
            public void createHeader(SmoothRefreshLayout layout) {
                ClassicHeader header = new ClassicHeader(layout.getContext());
                layout.setHeaderView(header);
            }

            @Override
            public void createFooter(SmoothRefreshLayout layout) {
                ClassicFooter footer = new ClassicFooter(layout.getContext());
                layout.setFooterView(footer);
            }
        });
  • 動(dòng)態(tài)代碼添加
        ClassicHeader header = new ClassicHeader(mRefreshLayout.getContext());
        mRefreshLayout.setHeaderView(header);
        ClassicFooter footer = new ClassicFooter(mRefreshLayout.getContext());
        mRefreshLayout.setFooterView(footer);
  • 請直接寫入Xml文件,SmoothRefreshLayout會(huì)根據(jù)添加的View是否是實(shí)現(xiàn)了IRefreshView接口進(jìn)行判斷

實(shí)現(xiàn)類QQ下拉阻尼效果

       mRefreshLayout.setIndicatorOffsetCalculator(new IIndicator.IOffsetCalculator() {
           @Override
           public float calculate(@IIndicator.MovingStatus int status, int currentPos, float offset) {
               if (status == IIndicator.MOVING_HEADER) {
                   if (offset < 0) {
                       //如果希望拖動(dòng)縮回時(shí)類似QQ一樣沒有阻尼效果,阻尼效果只存在于下拉則可以在此返回offset
                       //如果希望拖動(dòng)縮回時(shí)類似QQ一樣有阻尼效果,那么請注釋掉這個(gè)判斷語句
                       return offset;
                   }
                   return (float) Math.pow(Math.pow(currentPos / 2, 1.28d) + offset, 1 / 1.28d) * 2 - currentPos;
               } else if (status == IIndicator.MOVING_FOOTER) {
                   if (offset > 0) {
                       //如果希望拖動(dòng)縮回時(shí)類似QQ一樣沒有阻尼效果,阻尼效果只存在于上拉則可以在此返回offset
                       //如果希望拖動(dòng)縮回時(shí)類似QQ一樣有阻尼效果,那么請注釋掉這個(gè)判斷語句
                       return offset;
                   }
                   return -((float) Math.pow(Math.pow(currentPos / 2, 1.28d) - offset, 1 / 1.28d) * 2 - currentPos);
               } else {
                   if (offset > 0) {
                       return (float) Math.pow(offset, 1 / 1.28d) * 2;
                   } else if (offset < 0) {
                       return -(float) Math.pow(-offset, 1 / 1.28d) * 2;
                   } else {
                       return offset;
                   }
               }
           }
       });

Xml屬性

SmoothRefreshLayout 自身配置
名稱 類型 描述
sr_content reference 指定內(nèi)容視圖的資源ID
sr_resistance float 移動(dòng)刷新視圖時(shí)候的移動(dòng)阻尼(默認(rèn):1.65f
sr_resistanceOfFooter float 移動(dòng)Footer視圖時(shí)候的移動(dòng)阻尼(默認(rèn):1.65f
sr_resistanceOfHeader float 移動(dòng)Header視圖時(shí)候的移動(dòng)阻尼(默認(rèn):1.65f
sr_ratioToRefresh float 觸發(fā)刷新時(shí)位置占刷新視圖的高度比(默認(rèn):1.1f
sr_ratioOfHeaderToRefresh float 觸發(fā)刷新時(shí)位置占Header視圖的高度比(默認(rèn):1.1f
sr_ratioOfFooterToRefresh float 觸發(fā)加載更多時(shí)位置占Footer視圖的高度比(默認(rèn):1.1f
sr_ratioToKeep float 刷新中保持視圖位置占刷新視圖的高度比(默認(rèn):1f),該屬性的值必須小于等于觸發(fā)刷新高度比才會(huì)有效果
sr_ratioToKeepHeader float 刷新中保持視圖位置占Header視圖的高度比(默認(rèn):1f),該屬性的值必須小于等于觸發(fā)刷新高度比才會(huì)有效果
sr_ratioToKeepFooter float 刷新中保持視圖位置占Footer視圖的高度比(默認(rèn):1f),該屬性的值必須小于等于觸發(fā)刷新高度比才會(huì)有效果
sr_maxMoveRatio float 最大移動(dòng)距離占刷新視圖的高度比(默認(rèn):0f,表示不會(huì)觸發(fā))
sr_maxMoveRatioOfHeader float 最大移動(dòng)距離占Header視圖的高度比(默認(rèn):0f,表示不會(huì)觸發(fā))
sr_maxMoveRatioOfFooter float 最大移動(dòng)距離占Footer視圖的高度比(默認(rèn):0f,表示不會(huì)觸發(fā))
sr_closeDuration integer 指定收縮刷新視圖到起始位置的時(shí)長(默認(rèn):500
sr_closeHeaderDuration integer 指定收縮Header視圖到起始位置的時(shí)長(默認(rèn):500
sr_closeFooterDuration integer 指定收縮Footer視圖到起始位置的時(shí)長(默認(rèn):500
sr_backToKeepDuration integer 設(shè)置回滾到保持刷新視圖位置的時(shí)間(默認(rèn):200
sr_backToKeepHeaderDuration integer 設(shè)置回滾到保持Header視圖位置的時(shí)間(默認(rèn):200
sr_backToKeepFooterDuration integer 設(shè)置回滾到保持Footer視圖位置的時(shí)間(默認(rèn):200
sr_enablePinContent boolean 固定內(nèi)容視圖(默認(rèn):false
sr_enableKeep boolean 刷新中保持視圖停留在所設(shè)置的應(yīng)該停留的位置(默認(rèn):true
sr_enablePullToRefresh boolean 拉動(dòng)刷新,下拉或者上拉到觸發(fā)刷新位置即立即觸發(fā)刷新(默認(rèn):false
sr_enableOverScroll boolean 越界回彈(默認(rèn):true
sr_emptyLayout reference 指定空狀態(tài)下對(duì)應(yīng)的布局資源ID
sr_errorLayout reference 指定異常狀態(tài)下對(duì)應(yīng)的布局資源ID
sr_customLayout reference 指定自定義狀態(tài)下對(duì)應(yīng)的布局資源ID
sr_state enum 狀態(tài)設(shè)置(默認(rèn):STATE_CONTENT
sr_enableRefresh boolean 設(shè)置是否啟用下拉刷新(默認(rèn):ture
sr_enableLoadMore boolean 設(shè)置是否啟用加載更多(默認(rèn):false
sr_headerBackgroundColor color 設(shè)置Header刷新高度區(qū)域的背景色
sr_footerBackgroundColor color 設(shè)置Footer刷新高度區(qū)域的背景色
sr_mode enum 模式設(shè)置(默認(rèn):MODE_DEFAULT為刷新控件模式)
sr_stickyHeader reference 指定黏貼頭部的資源ID,當(dāng)SRL處于移動(dòng)頭部視圖時(shí)該黏貼頭部會(huì)跟隨Target視圖進(jìn)行移動(dòng)
TwoLevelSmoothRefreshLayout 自身配置
名稱 類型 描述
sr_enableTwoLevelRefresh boolean 設(shè)置是否啟用二級(jí)刷新(默認(rèn):true
sr_backToKeep2Duration boolean 設(shè)置回滾到保持二級(jí)刷新頭部處于二級(jí)刷新過程中的時(shí)長(默認(rèn):500
sr_closeHeader2Duration boolean 設(shè)置關(guān)閉二級(jí)刷新頭部的時(shí)長(默認(rèn):500
SmoothRefreshLayout包裹內(nèi)部其他View支持配置
名稱 類型 描述
layout_gravity flag 指定其它被包裹視圖的對(duì)齊屬性(非 targetView、非refreshView)

SmoothRefreshLayout java屬性設(shè)置方法

名稱 參數(shù) 描述
setHeaderView IRefreshView 配置頭部視圖
setFooterView IRefreshView 配置尾部視圖
setContentView int,View 配置內(nèi)容視圖,參數(shù)1:設(shè)置內(nèi)容視圖對(duì)應(yīng)的狀態(tài),參數(shù)2:狀態(tài)對(duì)應(yīng)的內(nèi)容視圖
setMode int 配置當(dāng)前模式
setState int 配置當(dāng)前狀態(tài)
setState int,boolean 配置當(dāng)前狀態(tài),參數(shù)1:當(dāng)前狀態(tài),參數(shù)2:是否使用漸變動(dòng)畫過渡
setDisableWhenAnotherDirectionMove boolean 內(nèi)部視圖含有其他方向滑動(dòng)視圖時(shí)需設(shè)置該屬性為ture(默認(rèn):false
setEnableNextPtrAtOnce boolean 刷新完成即可再次刷新
setMaxOverScrollDuration int 設(shè)置越界回彈動(dòng)畫最長時(shí)間(默認(rèn):500
setMinOverScrollDuration int 設(shè)置越界回彈動(dòng)畫最短時(shí)間(默認(rèn):150
setResistance float 移動(dòng)刷新視圖時(shí)候的移動(dòng)阻尼(默認(rèn):1.65f
setResistanceOfFooter float 移動(dòng)Footer視圖時(shí)候的移動(dòng)阻尼(默認(rèn):1.65f
setResistanceOfHeader float 移動(dòng)Header視圖時(shí)候的移動(dòng)阻尼(默認(rèn):1.65f
setRatioToRefresh float 觸發(fā)刷新時(shí)位置占刷新視圖的高度比(默認(rèn):1.1f
setRatioOfHeaderToRefresh float 觸發(fā)刷新時(shí)位置占Header視圖的高度比(默認(rèn):1.1f
setRatioOfFooterToRefresh float 觸發(fā)加載更多時(shí)位置占Footer視圖的高度比(默認(rèn):1.1f
setRatioToKeep float 刷新中保持視圖位置占刷新視圖的高度比(默認(rèn):1f),該屬性的值必須小于等于觸發(fā)刷新高度比才會(huì)有效果
setRatioToKeepHeader float 刷新中保持視圖位置占Header視圖的高度比(默認(rèn):1f),該屬性的值必須小于等于觸發(fā)刷新高度比才會(huì)有效果
setRatioToKeepFooter float 刷新中保持視圖位置占Footer視圖的高度比(默認(rèn):1f),該屬性的值必須小于等于觸發(fā)刷新高度比才會(huì)有效果
setMaxMoveRatio float 最大移動(dòng)距離占刷新視圖的高度比(默認(rèn):0f,表示不會(huì)觸發(fā))
setMaxMoveRatioOfHeader float 最大移動(dòng)距離占Header視圖的高度比(默認(rèn):0f,表示不會(huì)觸發(fā))
setMaxMoveRatioOfFooter float 最大移動(dòng)距離占Footer視圖的高度比(默認(rèn):0f,表示不會(huì)觸發(fā))
setDurationToClose int 指定收縮刷新視圖到起始位置的時(shí)長(默認(rèn):500
setDurationToCloseHeader int 指定收縮Header視圖到起始位置的時(shí)長(默認(rèn):500
setDurationToCloseFooter int 指定收縮Footer視圖到起始位置的時(shí)長(默認(rèn):500
setDurationOfBackToKeep integer 設(shè)置回滾到保持刷新視圖位置的時(shí)間(默認(rèn):200
setDurationOfBackToKeepHeader integer 設(shè)置回滾到保持Header視圖位置的時(shí)間(默認(rèn):200
setDurationOfBackToKeepFooter integer 設(shè)置回滾到保持Footer視圖位置的時(shí)間(默認(rèn):200
setEnablePinContentView boolean 固定內(nèi)容視圖(默認(rèn):false
setEnablePullToRefresh boolean 拉動(dòng)刷新,下拉或者上拉到觸發(fā)刷新位置即立即觸發(fā)刷新(默認(rèn):false
setEnableOverScroll boolean 越界回彈(默認(rèn):true
setEnableInterceptEventWhileLoading boolean 刷新中攔截不響應(yīng)觸摸操作(默認(rèn):false
setEnableHeaderDrawerStyle boolean Header抽屜樣式,即Header視圖在內(nèi)容視圖下面(默認(rèn):false
setEnableFooterDrawerStyle boolean Footer抽屜樣式,即Footer視圖在內(nèi)容視圖下面(默認(rèn):false
setDisablePerformRefresh boolean 關(guān)閉觸發(fā)Header刷新(默認(rèn):false
setDisablePerformLoadMore boolean 關(guān)閉觸發(fā)Footer刷新(默認(rèn):false
setEnableNoMoreData boolean 設(shè)置Footer沒有更多數(shù)據(jù),該選項(xiàng)設(shè)置true時(shí)在Frame層等同setDisablePerformLoadMore設(shè)置為true,只是自定義視圖可以根據(jù)該標(biāo)志位改變視圖樣式,ClassicFooter默認(rèn)實(shí)現(xiàn)了對(duì)該屬性的支持(默認(rèn):false
setEnableNoSpringBackWhenNoMoreData boolean 設(shè)置Footer沒有更多數(shù)據(jù)情況下不再回彈
setDisableRefresh boolean 禁用Header刷新(默認(rèn):false
setDisableLoadMore boolean 禁用Footer刷新(默認(rèn):false
setEnableKeepRefreshView boolean 刷新中保持視圖停留在所設(shè)置的應(yīng)該停留的位置(默認(rèn):true
setEnableAutoLoadMore boolean 到底部自動(dòng)加載(默認(rèn):false
setEnablePinRefreshViewWhileLoading boolean 固定刷新視圖在所設(shè)置的應(yīng)該停留的位置,并且不響應(yīng)移動(dòng),即Material樣式(默認(rèn):false),設(shè)置前提是開啟了setEnablePinContentViewsetEnableKeepRefreshView2個(gè)選項(xiàng),否則運(yùn)行時(shí)會(huì)拋出異常
setSpringInterpolator Interpolator 設(shè)置默認(rèn)的滾動(dòng)插值器
setOverScrollInterpolator Interpolator 設(shè)置越界回彈時(shí)的滾動(dòng)插值器
setEnableCheckInsideAnotherDirectionView boolean 設(shè)置是否開啟檢查手指按下點(diǎn)是否位于其他方向滾動(dòng)視圖內(nèi),該屬性起作用必須滿足開啟setDisableWhenAnotherDirectionMove
setEnableCompatLoadMoreScroll boolean 設(shè)置是否開啟加載更多時(shí)的同步滾動(dòng)(默認(rèn):true
setHeaderBackgroundColor int 設(shè)置Header刷新高度區(qū)域的背景色,可用以替代在Header樣式為不需要?jiǎng)討B(tài)改變視圖大小的情況下又想設(shè)置刷新高度區(qū)域的背景色的場景
setFooterBackgroundColor int 設(shè)置Footer刷新高度區(qū)域的背景色,可用以替代在Footer樣式為不需要?jiǎng)討B(tài)改變視圖大小的情況下又想設(shè)置刷新高度區(qū)域的背景色的場景
setEnableSmoothRollbackWhenCompleted boolean 設(shè)置開啟當(dāng)刷新完成時(shí),回滾動(dòng)作不能被打斷
setDisableLoadMoreWhenContentNotFull boolean 設(shè)置當(dāng)內(nèi)容視圖未滿屏?xí)r關(guān)閉加載更多
setStickyHeaderResId int 設(shè)置黏貼頭部視圖的資源ID

SmoothRefreshLayout 回調(diào)

名稱 參數(shù) 描述
setOnRefreshListener T extends OnRefreshListener 設(shè)置刷新事件監(jiān)聽回調(diào)
setOnStateChangedListener OnStateChangedListener 設(shè)置狀態(tài)改變回調(diào)
setChangeStateAnimatorCreator IChangeStateAnimatorCreator 設(shè)置改變狀態(tài)時(shí)使用的動(dòng)畫創(chuàng)建者
addOnUIPositionChangedListener OnUIPositionChangedListener 添加視圖位置變化的監(jiān)聽回調(diào)
removeOnUIPositionChangedListener OnUIPositionChangedListener 移除視圖位置變化的監(jiān)聽回調(diào)
setOnLoadMoreScrollCallback OnLoadMoreScrollCallback 設(shè)置Footer完成刷新后進(jìn)行平滑滾動(dòng)的回調(diào)
setOnPerformAutoLoadMoreCallBack OnPerformAutoLoadMoreCallBack 設(shè)置觸發(fā)自動(dòng)加載更多的條件回調(diào),如果回調(diào)的canAutoLoadMore()方法返回true則會(huì)立即觸發(fā)加載更多
setOnHeaderEdgeDetectCallBack OnHeaderEdgeDetectCallBack 設(shè)置檢查內(nèi)容視圖是否在頂部的重載回調(diào)(SmoothRefreshLayout內(nèi)部isNotYetInEdgeCannotMoveHeader()方法)
setOnFooterEdgeDetectCallBack OnFooterEdgeDetectCallBack 設(shè)置檢查內(nèi)容視圖是否在底部的重載回調(diào)(SmoothRefreshLayout內(nèi)部isNotYetInEdgeCannotMoveFooter()方法)
setOnHookHeaderRefreshCompleteCallback OnHookUIRefreshCompleteCallBack 設(shè)置Header刷新完成的Hook回調(diào),可實(shí)現(xiàn)延遲完成刷新
setOnHookFooterRefreshCompleteCallback OnHookUIRefreshCompleteCallBack 設(shè)置Footer刷新完成的Hook回調(diào),可實(shí)現(xiàn)延遲完成刷新
setOnInsideAnotherDirectionViewCallback OnInsideAnotherDirectionViewCallback 設(shè)置檢查手指按下點(diǎn)是否位于其他滾動(dòng)視圖內(nèi)的重載回調(diào),可自定義判斷邏輯,提高判斷效率

SmoothRefreshLayout 其它

名稱 參數(shù) 描述
debug(靜態(tài)方法) boolean Debug開關(guān)
setDefaultCreator(靜態(tài)方法) IRefreshViewCreator 設(shè)置刷新視圖創(chuàng)建者,如果沒有特殊指定刷新視圖且設(shè)置的模式需要刷新視圖則會(huì)調(diào)用創(chuàng)建者構(gòu)建刷新視圖
refreshComplete 無參 刷新完成,且設(shè)置最后一次刷新狀態(tài)為成功
refreshComplete boolean 刷新完成,參數(shù):設(shè)置最后一次刷新是否刷新成功
refreshComplete boolean,long 刷新完成,參數(shù)1:設(shè)置最后一次刷新是否刷新成功,參數(shù)2:設(shè)置延遲重置刷新狀態(tài)的時(shí)間(會(huì)先觸發(fā)刷新視圖的刷新完成回調(diào),但在延遲的時(shí)間內(nèi)庫實(shí)際上狀態(tài)仍是刷新狀態(tài))
refreshComplete long 刷新完成,且設(shè)置最后一次刷新狀態(tài)為成功,參數(shù):設(shè)置延遲重置刷新狀態(tài)的時(shí)間(會(huì)先觸發(fā)刷新視圖的刷新完成回調(diào),但在延遲的時(shí)間內(nèi)庫實(shí)際上狀態(tài)仍是刷新狀態(tài))
setLoadingMinTime long 設(shè)置開始刷新到結(jié)束刷新的最小時(shí)間差(默認(rèn):500),參數(shù):時(shí)間差
autoRefresh 無參 自動(dòng)觸發(fā)Header刷新,立即觸發(fā)刷新事件并滾動(dòng)到觸發(fā)Header刷新位置
autoRefresh boolean 自動(dòng)觸發(fā)Header刷新,參數(shù):是否立即觸發(fā)刷新事件,會(huì)滾動(dòng)到觸發(fā)Header刷新位置
autoRefresh boolean,boolean 自動(dòng)觸發(fā)Header刷新,參數(shù)1:是否立即觸發(fā)刷新事件,參數(shù)2:是否滾動(dòng)到觸發(fā)Header刷新位置
autoLoadMore 無參 自動(dòng)觸發(fā)Footer刷新,立即觸發(fā)刷新事件并滾動(dòng)到觸發(fā)Footer刷新位置
autoLoadMore boolean 自動(dòng)觸發(fā)Footer刷新,參數(shù):是否立即觸發(fā)刷新事件,會(huì)滾動(dòng)到觸發(fā)Footer刷新位置
autoLoadMore boolean,boolean 自動(dòng)觸發(fā)Footer刷新,參數(shù)1:是否立即觸發(fā)刷新事件,參數(shù)2:是否滾動(dòng)到觸發(fā)Footer刷新位置
setLoadMoreScrollTargetView View 設(shè)置Footer移動(dòng)時(shí),響應(yīng)移動(dòng)事件的內(nèi)容視圖,例如在SmoothRefreshLayout中有一個(gè)CoordinatorLayout,CoordinatorLayout中有AppbarLayout、RecyclerView等,加載更多時(shí)希望被移動(dòng)的視圖為RecyclerView而不是CoordinatorLayout,那么設(shè)置RecyclerView為TargetView即可

TwoLevelSmoothRefreshLayout java屬性設(shè)置方法

名稱 參數(shù) 描述
setRatioOfHeaderToHintTwoLevel float 設(shè)置觸發(fā)二級(jí)刷新提示時(shí)的位置占Header視圖的高度比
setRatioOfHeaderToTwoLevel float 設(shè)置觸發(fā)二級(jí)刷新時(shí)的位置占Header視圖的高度比
setRatioToKeepTwoLevelHeader float 二級(jí)刷新中保持視圖位置占Header視圖的高度比(默認(rèn):1f
setDisableTwoLevelRefresh boolean 設(shè)置是否關(guān)閉二級(jí)刷新(默認(rèn):false
setDurationOfBackToKeepTwoLevel int 設(shè)置回滾到保持二級(jí)刷新Header視圖位置的時(shí)間(默認(rèn):500
setDurationToCloseTwoLevel int 設(shè)置二級(jí)刷新Header刷新完成回滾到起始位置的時(shí)間(默認(rèn):500

TwoLevelSmoothRefreshLayout 其它

名稱 參數(shù) 描述
autoTwoLevelRefreshHint 無參 自動(dòng)觸發(fā)二級(jí)刷新提示并滾動(dòng)到觸發(fā)提示位置后回滾回起始位置
autoTwoLevelRefreshHint int 自動(dòng)觸發(fā)二級(jí)刷新提示并滾動(dòng)到觸發(fā)提示位置后停留指定時(shí)長,參數(shù):停留多長時(shí)間
autoTwoLevelRefreshHint boolean 自動(dòng)觸發(fā)二級(jí)刷新提示是否滾動(dòng)到觸發(fā)提示位置后回滾回起始位置,參數(shù):是否滾到到觸發(fā)位置
autoTwoLevelRefreshHint boolean,int 自動(dòng)觸發(fā)二級(jí)刷新提示,參數(shù)1:是否滾動(dòng)到觸發(fā)位置,參數(shù)2:停留多長時(shí)間
autoTwoLevelRefreshHint boolean,int,boolean 自動(dòng)觸發(fā)二級(jí)刷新提示,參數(shù)1:是否滾動(dòng)到觸發(fā)位置,參數(shù)2:停留多長時(shí)間,參數(shù)3:是否可以被觸摸打斷,即觸發(fā)提示動(dòng)作過程中攔截觸摸事件,直到回滾到起始位置并重置為默認(rèn)狀態(tài)

Thanks

License

MIT License

Copyright (c) 2017 dkzwm
Copyright (c) 2015 liaohuqiu.net

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容