下拉刷新系列三:android-Ultra-Pull-To-Refresh 使用總結

android-Ultra-Pull-To-Refresh框架 下拉刷新

下拉刷新系列一中,有列出幾種主流下拉刷新框架,今天主要來研究一下android-Ultra-Pull-To-Refresh

1. 基本用法
  1. 導庫
dependencies {
    ......
    // 
    api 'in.srain.cube:ultra-ptr:1.0.11'
}
  1. 佈局ptr_act.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
     <in.srain.cube.views.ptr.PtrFrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/ptr_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:ptr_resistance="1.7"
        app:ptr_ratio_of_header_height_to_refresh="1.2"
        app:ptr_duration_to_close="200"
        app:ptr_duration_to_close_header="300"
        app:ptr_keep_header_when_refresh="true"
        app:ptr_pull_to_fresh="false">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:background="#33ff0000">
            <TextView
                android:id="@+id/text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_gravity="center_vertical"
                android:text="hello world"/>
        </LinearLayout>

    </in.srain.cube.views.ptr.PtrFrameLayout>
</RelativeLayout>
  1. PtrAct.java
public class PtrAct extends Activity {

    private PtrFrameLayout ptrFrameLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ptr_act);

        ptrFrameLayout = findViewById(R.id.ptr_layout);

//        PtrClassicDefaultHeader header = new PtrClassicDefaultHeader(this);
        MaterialHeader header = new MaterialHeader(this);
        ptrFrameLayout.setHeaderView(header);
        ptrFrameLayout.addPtrUIHandler(header);
        ptrFrameLayout.setLoadingMinTime(100);
        ptrFrameLayout.setDurationToCloseHeader(100);
        ptrFrameLayout.setPtrHandler(new PtrHandler() {
            @Override
            public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
				// 檢查是否可以刷新,這裏使用默認的PtrHandler進行判斷
                 return PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header);
              }
  
              @Override
              public void onRefreshBegin(PtrFrameLayout frame) {
              // 在刷新前需要準備什麼工作
            });

        ptrFrameLayout.setPinContent(false);

//        // the following are default settings
//        ptrFrameLayout.setResistance(1.7f); // 設置下拉的阻尼係數,值越大感覺越難下拉
//        ptrFrameLayout.setRatioOfHeaderHeightToRefresh(1.2f); // 設置超過頭部的多少時,釋放可以執行刷新操作
        ptrFrameLayout.setDurationToClose(200); // 設置下拉回彈的時間
//        ptrFrameLayout.setDurationToCloseHeader(1000); // 設置刷新完成,頭部回彈時間,注意和前一個進行區別
//        // default is false
        ptrFrameLayout.setPullToRefresh(true);
//        // default is true
//        ptrFrameLayout.setKeepHeaderWhenRefresh(true);
    }

}
2. 原理分析

android-Ultra-Pull-To-Refresh (簡稱 UltraPTR )是一個強大的 Andriod 下拉刷新框架

  1. 整個項目圍繞核心類PtrFrameLayout,繼承自ViewGroup,PtrFrameLayout代表了一個下拉刷新的自定義控件。有且只能有兩個子View,頭部Header內容Content。和所有的自定義控件一樣,PtrFrameLayout通過重寫onFinishInflate、onMeasure、onLayout來確定控件的大小和位置,通過重寫dispatchTouchEvent來確定控件的下拉行爲。
  2. 通常情況下,Header會實現PtrUIHandler接口。簡潔完善的Header抽象,方便進行擴展,構建滿足需求的Header
  3. Content可以爲任意的View

UltraPTR首先抽象出兩個接口,功能接口UI接口

  1. PtrHandler代表下拉刷新的功能接口,包含刷新功能回調方法以及判斷是否可以下拉的方法,用戶實現此接口來進行數據刷新工作
  2. PtrUIHandler代表下拉刷新的UI接口,包含準備下拉、下拉中、下拉完成、下拉重置以及下拉過程中的位置變化等回調方法。通常情況下,Header需要實現此接口,來處理下拉刷新過程中頭部UI的變化

配置參數

  1. 阻尼係數:Resistance // 默認: 1.7f,越大,感覺下拉時越喫力。
  2. 觸發刷新時移動的位置比例:RatioOfHeaderHeightToRefresh // 默認,1.2f,移動達到頭部高度1.2倍時可觸發刷新操作。
  3. 回彈延時:DurationToClose // 默認 200ms,回彈到刷新高度所用時間
  4. 頭部回彈時間:DurationToCloseHeader // 默認1000ms
  5. 刷新是保持頭部:KeepHeaderWhenRefresh // 默認值 true.
  6. 下拉刷新 / 釋放刷新:PullToRefresh // 默認爲釋放刷新,默認false
  7. 頭部風格
    mPtrFrameLayout.setPinContent(true);
    這裏可以根據個人喜好設置true或者false,true則在刷新的時候,將佈局裏的內容固定不動,false則是在刷新的時候進度條會將佈局內容擠下來
參考
  1. 下拉刷新PtrFrameLayout組件的使用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章