1. 程式人生 > >一個高效、穩定、強大的Android重新整理庫

一個高效、穩定、強大的Android重新整理庫

SmoothRefreshLayout

專案地址

一個高效的Android重新整理庫,理論上支援所有的檢視,比官方的SwipeRefreshLayout更強大且使用方便.
本開源庫的部分程式碼來自android-Ultra-Pull-To-Refresh.
非常感謝他提供的這麼棒的開源專案!

特性:

  • 理論上支援所有的檢視,且可根據具體需求高效適配.
  • 支援5種模式,NONE(做為FrameLayout使用)、REFRESH(頭部重新整理)、LOAD_MORE(底部重新整理)、BOTH(頭部重新整理和底部重新整理)、OVER_SCROLL(越界回彈).
  • 支援巢狀滑動,完整實現了NestedScrollingChild,NestedScrollingParent 介面,玩轉CoordinatorLayout.
  • 直接繼承自ViewGroup,擁有卓越的效能,支援類FameLayout的特性(Gravity、Margin).
  • 支援自動重新整理、自動上拉載入、到底自動載入更多(不推薦,建議使用Adapter實現).
  • 支援越界回彈.
  • 支援抽屜效果.
  • 支援二級重新整理事件(TwoLevelSmoothRefreshLayout).
  • 支援ListView,RecyclerView載入更多的平滑滾動.
  • 支援內容檢視的Margin,PS:滾動中沒有了Margin效果?SmoothRefreshLayout不存在這種問題.
  • 豐富的回撥介面和除錯資訊,可利用現有Api實現豐富的效果.

演示程式

快照

  • 測試QQ瀏覽器樣式
  • 測試QQ活動樣式
  • 測試2級重新整理
  • 包含FrameLayout
  • 包含TextView
  • 包含ListView
  • 包含GridView
  • 包含RecyclerView
  • 包含ViewPager
  • 包含WebView
  • CoordinatorLayout
  • 越界回彈模式
  • 測試巢狀滑動

使用

Gradle

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

dependencies {  
    compile 'com.github.dkzwm:SmoothRefreshLayout:1.3.2'
}

在Xml中配置

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

Java程式碼配置

SmoothRefreshLayout refreshLayout = (SmoothRefreshLayout)findViewById(R.id.smoothRefreshLayout);
refreshLayout.setMode(SmoothRefreshLayout.MODE_BOTH);
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 {
    byte TYPE_HEADER = 0;
    byte TYPE_FOOTER = 1;

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

    /**
     * 一般情況都是View實現本介面,所以返回this;
     */
    View getView();

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

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

    /**
     * 重新配置檢視,準備重新整理
     */
    void onRefreshPrepare(SmoothRefreshLayout layout);

    /**
     * 開始重新整理
     */
    void onRefreshBegin(SmoothRefreshLayout layout, IIndicator indicator);

    /**
     * 重新整理完成
     */
    void onRefreshComplete(SmoothRefreshLayout layout);

    /**
     * 當頭部或者尾部檢視發生位置變化
     */
    void onRefreshPositionChanged(SmoothRefreshLayout layout, byte status, IIndicator indicator);

}
  • 新增自定義重新整理檢視
    • 程式碼新增
    setHeaderView(@NonNull IRefreshView header);
    setFooterView(@NonNull IRefreshView footer);
    • 請直接寫入Xml檔案,SmoothRefreshLayout會根據新增的View是否是實現了IRefreshView介面進行判斷

Xml屬性

SmoothRefreshLayout 自身配置
名稱 型別 描述
sr_mode enum 模式設定(預設:none
sr_content integer 指定內容檢視的資源ID
sr_resistance float 重新整理檢視的移動阻尼(預設:1.65f
sr_resistance_of_pull_up float Footer檢視的移動阻尼(預設:1.65f
sr_resistance_of_pull_down float Header檢視的移動阻尼(預設:1.65f
sr_ratio_of_refresh_height_to_refresh float 觸發重新整理時位置佔重新整理檢視的高度比(預設:1.1f
sr_ratio_of_header_height_to_refresh float 觸發重新整理時位置佔Header檢視的高度比(預設:1.1f
sr_ratio_of_footer_height_to_refresh float 觸發載入更多時位置佔Footer檢視的高度比(預設:1.1f
sr_offset_ratio_to_keep_refresh_while_Loading float 重新整理中保持檢視位置佔重新整理檢視的高度比(預設:1f),該屬性的值必須小於等於觸發重新整理高度比才會有效果
sr_offset_ratio_to_keep_header_while_Loading float 重新整理中保持檢視位置佔Header檢視的高度比(預設:1f),該屬性的值必須小於等於觸發重新整理高度比才會有效果
sr_offset_ratio_to_keep_footer_while_Loading float 重新整理中保持檢視位置佔Footer檢視的高度比(預設:1f),該屬性的值必須小於等於觸發重新整理高度比才會有效果
sr_can_move_the_max_ratio_of_refresh_height float 最大移動距離佔重新整理檢視的高度比(預設:0f,表示不會觸發)
sr_can_move_the_max_ratio_of_header_height float 最大移動距離佔Header檢視的高度比(預設:0f,表示不會觸發)
sr_can_move_the_max_ratio_of_footer_height float 最大移動距離佔Footer檢視的高度比(預設:0f,表示不會觸發)
sr_duration_to_close_of_refresh integer 指定收縮重新整理檢視到起始位置的時長(預設:500
sr_duration_to_close_of_header integer 指定收縮Header檢視到起始位置的時長(預設:500
sr_duration_to_close_of_footer integer 指定收縮Footer檢視到起始位置的時長(預設:500
sr_duration_of_back_to_refresh_height integer 收縮重新整理檢視到觸發重新整理位置的時長(預設:200
sr_duration_of_back_to_header_height integer 收縮重新整理檢視到觸發Header重新整理位置的時長(預設:200
sr_duration_of_back_to_footer_height integer 收縮重新整理檢視到觸發Footer重新整理位置的時長(預設:200
sr_enable_pin_content boolean 固定內容檢視(預設:false
sr_enable_keep_refresh_view boolean 重新整理中保持檢視停留在所設定的應該停留的位置(預設:true
sr_enable_pull_to_refresh boolean 拉動重新整理,下拉或者上拉到觸發重新整理位置即立即觸發重新整理(預設:false
sr_enable_over_scroll boolean 越界回彈(預設:true),使用者需要自己設定內容檢視的 overScrollMode 為 never才能達到最優效果
SmoothRefreshLayout包裹內部其他View支援配置
名稱 型別 描述
sr_layout_gravity flag 指定其它被包裹檢視的對齊屬性(非content view、非refresh view)

Java屬性設定方法

名稱 引數 描述
setHeaderView IRefreshView 配置頭部檢視
setFooterView IRefreshView 配置尾部檢視
setContentView View 配置內容檢視
setEnableNextPtrAtOnce boolean 重新整理完成即可再次重新整理
setResistance float 重新整理檢視的移動阻尼(預設:1.65f
setResistanceOfPullUp float Footer檢視的移動阻尼(預設:1.65f
setResistanceOfPullDown float Header檢視的移動阻尼(預設:1.65f
setRatioOfRefreshViewHeightToRefresh float 觸發重新整理時位置佔重新整理檢視的高度比(預設:1.1f
setRatioOfHeaderHeightToRefresh float 觸發重新整理時位置佔Header檢視的高度比(預設:1.1f
setRatioOfFooterHeightToRefresh float 觸發載入更多時位置佔Footer檢視的高度比(預設:1.1f
setOffsetRatioToKeepRefreshViewWhileLoading float 重新整理中保持檢視位置佔重新整理檢視的高度比(預設:1f),該屬性的值必須小於等於觸發重新整理高度比才會有效果
setOffsetRatioToKeepHeaderWhileLoading float 重新整理中保持檢視位置佔Header檢視的高度比(預設:1f),該屬性的值必須小於等於觸發重新整理高度比才會有效果
setOffsetRatioToKeepFooterWhileLoading float 重新整理中保持檢視位置佔Footer檢視的高度比(預設:1f),該屬性的值必須小於等於觸發重新整理高度比才會有效果
setCanMoveTheMaxRatioOfRefreshViewHeight float 最大移動距離佔重新整理檢視的高度比(預設:0f,表示不會觸發)
setCanMoveTheMaxRatioOfHeaderHeight float 最大移動距離佔Header檢視的高度比(預設:0f,表示不會觸發)
setCanMoveTheMaxRatioOfFooterHeight float 最大移動距離佔Footer檢視的高度比(預設:0f,表示不會觸發)
setDurationToClose int 指定收縮重新整理檢視到起始位置的時長(預設:500
setDurationToCloseHeader int 指定收縮Header檢視到起始位置的時長(預設:500
setDurationToCloseFooter int 指定收縮Footer檢視到起始位置的時長(預設:500
setDurationOfBackToRefreshViewHeight integer 收縮重新整理檢視到觸發重新整理位置的時長(預設:200
setDurationOfBackToHeaderHeight integer 收縮重新整理檢視到觸發Header重新整理位置的時長(預設:200
setDurationOfBackToFooterHeight integer 收縮重新整理檢視到觸發Footer重新整理位置的時長(預設:200
setEnablePinContentView boolean 固定內容檢視(預設:false
setEnabledPullToRefresh boolean 拉動重新整理,下拉或者上拉到觸發重新整理位置即立即觸發重新整理(預設:false
setEnableOverScroll boolean 越界回彈(預設:true),使用者需要自己設定內容檢視的 overScrollMode 為 never 才能達到最優效果
setEnabledInterceptEventWhileLoading boolean 重新整理中攔截不響應觸控操作(預設:false
setEnableHeaderDrawerStyle boolean Header抽屜樣式,即Header檢視在內容檢視下面(預設:false
setEnableFooterDrawerStyle boolean Footer抽屜樣式,即Footer檢視在內容檢視下面(預設:false
setDisablePerformRefresh boolean 關閉觸發Header重新整理(預設:false
setDisablePerformLoadMore

相關推薦

一個高效穩定強大Android重新整理

SmoothRefreshLayout 專案地址 一個高效的Android重新整理庫,理論上支援所有的檢視,比官方的SwipeRefreshLayout更強大且使用方便. 本開源庫的部分程式碼來自android-Ultra-Pull-To-Refresh. 非常感

編寫靈活穩定高質量的CSS程式碼的規範(推薦收藏)

編寫靈活、穩定、高質量的HTML程式碼的規範 一、唯一定律 無論有多少人共同參與同一專案,一定要確保每一行程式碼都像是唯一個人編寫的。 二、HTML 2.1 語法 (1)用兩個空格來代替製表符(tab) -- 這是唯一能保證在所有環境下獲得一致展現的方法。 (2)巢狀元素應當

編寫靈活穩定高質量的前端程式碼的規範一(推薦收藏)

編寫靈活、穩定、高質量的HTML程式碼的規範 雖然現在前端很多都已經成為SPA(單頁面應用)開發,或許連渲染的html都是自動生成的.但是歸根結底,還是html和css,必要時候我們還是需要好好了解這些基礎的開發規範 當然這都是基礎性的規範,和公司規範的並不衝突.你也可以當作課外知識閱讀~ 一、唯一定律

編寫靈活穩定高質量的前端程式碼的規範二(推薦收藏)

編寫靈活、穩定、高質量的HTML程式碼的規範二 一、程式碼組織 1.1 注意 (1)以元件為單位組織程式碼段。 (2)制定一致的註釋規範。 (3)使用一致的空白符將程式碼分隔成塊,這樣利於掃描較大的文件。 (4)如果使用了多個 CSS 檔案,將其按照元件而非頁面的形式分拆,因為頁面會被重組,而元件只會被移

關於Glide——一個高效的圖片載入和快取類

最近應用經常出現OOM的問題,於是圖片載入的方式由原來的ImageLoader變成了Glide。我也是跟著導師慢慢的學習瞭解,有不對的地方歡迎指正。 首先,我發現Glide的一個限制性,也就是Glide只能用於ImageView,這是一個不好的地方,但是除了這個基本上都是好

Android 檔案下載引擎,穩定高效簡單易用:FileDownloader(結合okhttp)

Android 檔案下載引擎,穩定、高效、簡單易用 特點  簡單易用  高併發  獨立程序  自動斷點續傳  需要注意  為了絕大多數使用效能考慮,目前下載引擎目前受限於int可表示的範圍,而我們的回撥total與so far以byte為單位回撥,因此最大隻能表示到2^31-1=2_147_483_647 =

FileDownloader-Android 檔案下載引擎,穩定高效簡單易用

final FileDownloadListener queueTarget = new FileDownloadListener() { @Override protected void pending(BaseDownloadTask task, int soFarBytes, int

TitleLayout——一個Android輕松實現通用標準支持沈浸式狀態欄的標題欄

sub blog uri IT 特殊 java代碼 ber ext tar TitleLayout 多功能、通用的、可在布局或者使用Java代碼實現標題欄;支持沈浸式狀態欄,支持左側返回按鈕(不需要手動實現頁面返回),左側支持圖片+文字、圖片、文字;右側支持圖片、文字等。

Android WebView的前進後退重新整理

mWebView.goBack();   //後退  mWebView.goForward();//前進 mWebView.reload();  //重新整理   //點選後退按鈕,讓WebView後退一頁(也可以覆寫Activity的

[Android開源]:EasyGuideLayer: 這可能是最簡單靈活強大的頁面蒙層元件了!

顧名思義,EasyGuideLayer是用於進行Android頁面蒙層引導的元件。 特性 鏈式呼叫。呼叫邏輯清晰直觀 支援同時設定多個引導層 支援高亮區域的自定義繪製 支援高亮區域點選監聽 支援指定任意View設定蒙層引導 支援進行蒙層展示、隱藏事件監聽 支援直接使用draw

Android獲取應用程式名稱的穩定可靠簡單方案

獲取Android應用程式名稱的穩定、可靠、簡單方案 在Android開發中,相信絕大多數Android開發者使用的是網路上盛傳的這個方法獲取應用程式名稱的: /*** * 獲取應用程式名稱。 * @param context * @

動手造輪子,用DownLoadManage封裝一個App的更新元件(相容android 678)

前言 android app的更新是我們在平時開發的時候常常需要遇到的問題。通常的情況是我們用第三方的網路載入庫去進行地址的下載,然後進行更新。例如okHttp、volley等,都具備了下載的功能。 但是我們在用這些第三方庫進行下載的時候可能需要做很多之外的處理,比如更新的時候處理進度。寫一個notifi

一個API解決 區分當前使用應用的一切裝置平臺(AndroidIOS微信QQ等等一切有提供支援的)

Window Navigator 示例: <div id="example"></div> <script> var txt = ''; txt = "<p>Browser CodeName: " + navigator.appCodeName

一個簡單好用的下拉重新整理上拉載入控制元件

*本篇文章已授權微信公眾號 guolin_blog (郭霖)獨家釋出 有更新: 最新的庫版本為1.0.2(相容舊版本,舊版本是1.0.0),完整的庫地址: compile'com.zt.maven.widget:refreshview:1.0.2

Android自定義View:你需要一個簡單好用含歷史搜尋記錄的搜尋框嗎?

前言 Android開發中,類似下圖的搜尋功能非常常見 今天,我將帶來一款 封裝了 歷史搜尋記錄功能 & 樣式 的Android 自定義搜尋框 開源庫,希望你們會喜歡。

Android Studio 權威教程]AS 中配置強大的版本管理系統(GitSVN等)

在Eclipse中新增Git等版本管理工具需要自己新增外掛,而且個人覺得不咋好用,在AS中已經給我們整合好了,我們只需要配置一下就OK了,今天就和大家聊聊怎麼配置以及使用的要點。 1. 安裝Git/CVS 第一步首先你需要安裝Git/CVS

一個五年Android開發者百度阿里聚美映客的面試心經

該文章轉載地址:http://gdky005.com/2016/07/08/%E4%B8%80%E4%B8%AA%E4%BA%94%E5%B9%B4Android%E5%BC%80%E5%8F%91%E8%80%85%E7%99%BE%E5%BA%A6%E3%80%81%E

Android WebView載入網頁,實現前進後退重新整理超連結

你也可以檢視我的其他同類文章,也會讓你有一定的收貨! 先在要顯示網頁的佈局檔案中宣告WebView 在Activity中例項化WebView 呼叫WebView的loadUrl( )方法,設定WevView要顯示的網頁 為了讓WebView能夠響應超連結

12ffmpeg筆記-使用Android Studio編寫第一個ffmpeg程式

所需材料 1、android studio 2.3 2、android-ndk-r13 3、ffmpeg編譯結果(include,libs)     本文例項中需要使用到上次編譯的ffmpeg標頭檔案和靜態庫,如果沒有的話,請參看上一篇文章。     本文使用Android

【仿IOS】Android自定義一個簡潔美觀通用的Dialog

· 介紹     今天我們來學習一下如何自定義一個漂亮、美觀且通用的對話方塊。開始前,我們先了解一下對話方塊(Dialog),它是Android UI互動的一種形式,通常給予使用者一個重要事件的通知,讓使用者來處理這一個事件。它不同於其他幾種通知方式,比如Toast、N