android 上拉刷新下拉加載更多的開源框架 XRefreshView

android 上拉刷新下拉加載更多的開源框架 XRefreshView

項目地址:[https://github.com/huxq17/XRefreshView][6],對比了網上流行的開源項目,個人認爲:

  • XRefreshView 擴展性高。
  • 可自定義Footers,上拉樣式,完全可以自己自定義想要的交互效果和樣式
  • 可自定義Headers 下拉樣式,完全可以自己自定義想要的交互效果和樣式
  • 支持所有的控件 ,RecyclerView,listview,gridview,LinearLayout,WebView等
  • 可控性強
  • 性能高,沒有明顯的重繪
  • 作者熱情,如果遇到什麼問題。第一時間找他,他會第一時間幫你解答。沒有架子

快捷鍵

  • 我與 XRefreshView 相遇
  • 設置自定義樣式HeadersView
  • 設置自定義樣式FooterView
  • 下拉Headers 沒有什麼,下面講講作者提供Footer樣式吧
  • RecyclerView與其他View(ListView GridView LinearLayout……….)設置自定義下拉上拉樣式View不同之處
  • XRefreshView 屬性
  • 佈局中注意的地方。如果你的整個列表不是全屏的。可能有title有底部導航時
  • 鳴謝

我與 XRefreshView 相遇

其實,在android 行業大軍中,能自己去實現手勢控件的很少。大多數都是使用開源的項目。能寫出開源項目使用的人。技術水平肯定不一般。我個人自認爲達不到這樣的水平去實現這麼複雜的效果。去年,進了新公司。開始新的編程之路。項目前期準備,在xUtils 4羣裏問他們,上拉下拉使用的是那個框架。剛好作者也在,發了個鏈接 —— [ https://github.com/huxq17/XRefreshView ] 說:要不你去看看這個吧。我進去一看。效果正是我想要的。使用到現在一年多時間了。現在纔出來說說這個項目。

這裏不寫demo 例子,因爲作者的項目裏例子已經很詳情,下面講講要注意的地方。

例子請參考[https://github.com/huxq17/XRefreshView][2].

設置自定義樣式HeadersView

上拉 自定義Headers,需要實現IHeaderCallBack接口,例如:

public interface IHeaderCallBack {
    /**
     * 正常狀態
     */
    public void onStateNormal();

    /**
     * 準備刷新
     */
    public void onStateReady();

    /**
     * 正在刷新
     */
    public void onStateRefreshing();

    /**
     * 刷新結束
     */
    public void onStateFinish();

    /**
     * 獲取headerview顯示的高度與headerview高度的比例
     * 
     * @param offset
     *            移動距離和headerview高度的比例,範圍是0~10:headerview完全沒顯示 1:headerview完全顯示
     * @param offsetY
     *            headerview移動的距離
     */
    public void onHeaderMove(double offset, int offsetY,int deltaY);

    /**
     * 設置顯示上一次刷新的時間
     * 
     * @param lastRefreshTime
     *            上一次刷新的時間
     */
    public void setRefreshTime(long lastRefreshTime);

    /**
     * 隱藏footerview
     */
    public void hide();

    /**
     * 顯示footerview
     */
    public void show();

    /**
     * 獲得headerview的高度,如果不想headerview全部被隱藏,就可以只返回一部分的高度
     * 
     * @return
     */
    public int getHeaderHeight();
}

看到上面的接口就知道自己如何處理各種下拉狀態了吧。根據上面的回調方法定義我們自己的UI

設置自定義樣式FooterView

上拉 自定義Footer,需要實現IFooterCallBack接口,例如:

public interface IFooterCallBack {
    /**
     * 當不是到達底部自動加載更多的時候,需要自己寫點擊事件
     *
     * @param xRefreshViewListener
     */
    public void callWhenNotAutoLoadMore(XRefreshViewListener xRefreshViewListener);

    /**
     * 正常狀態,例如需要點擊footerview才能加載更多,主要是到達底部不自動加載更多時會被調用
     */
    public void onStateReady();

    /**
     * 正在刷新
     */
    public void onStateRefreshing();

    /**
     * 刷新結束 在此方法中不要調用show()方法
     * @param hidefooter footerview是否被隱藏
     */
    public void onStateFinish(boolean hidefooter);

    /**
     * 已無更多數據 在此方法中不要調用show()方法
     */
    public void onStateComplete();


    /**
     * 設置顯示或者隱藏footerview 不要在onStateFinish和onStateComplete中調用此方法
     * @param show
     */
    public void show(boolean show);

    /**
     * footerview是否顯示中
     *
     * @return
     */
    public boolean isShowing();

    /**
     * 獲得footerview的高度
     *
     * @return
     */
    public int getFooterHeight();
}

看到上面的接口就知道自己如何處理上拉各種狀態了吧。根據上面的回調方法定義我們自己的UI

下拉Headers 沒有什麼,下面講講作者提供Footer樣式吧

XRefreshContentView

XRefreshViewFooter

XRefreshContentView 是支持 當數據不滿一屏時,不顯示上拉的Footer

XRefreshViewFooter 不同在於,當數據不滿一屏時,會顯示“點擊加載更多”

根據個人的項目需要去使用。

如果要自定義時,可以去參考作者的這兩個類。之前我向他提過一些比較無知的問。爲什麼這些功能不支持在XRefreshView裏直接提供。作者給出的回答是。這是兩種不同的概念。XRefreshView提供的只是功能。Footer樣式 只是UI展示。也許,這是開發的思維模式吧。要懂劃分功能邏輯與View的分離。

RecyclerView與其他View(ListView GridView LinearLayout……….)設置自定義下拉上拉樣式View不同之處

ListView GridView LinearLayout……….設置方式 使用

xrv.setCustomFooterView(new XRefreshViewFooter(this));

xrv.setCustomHeaderView(new XRefreshViewHeader(this));

RecyclerView 設置

Adapter 中必須要extends BaseRecyclerAdapter

因爲上拉加載完全後就不會整個列表回彈。直接顯示數據。

mAdapter.setCustomLoadMoreView(view) 來設置上拉樣式。

這就是RecyclerView與其他view 在設置上的不同。同時,你也可以像ListView GridView LinearLayout……….一樣設置。這是沒有影響了。只是上拉加載效果更多而已

XRefreshView 屬性

xrv.setPullRefreshEnable(false); 是否允許刷新功能

xrv.setPullLoadEnable(false); 是否允許加載更多功能

xrv.setAutoRefresh(true); 是否自動刷新

xrv.setAutoLoadMore(true);是否滑到底部自動加載更多,false 爲手動點加載更多。

xrv.setSlienceLoadMore();這個方法是設置預加載功能。預加載就是提前加載。這個只針對於上拉加載。與setPreLoadCount(5)一起用。設置5就是提示5個item 去啓動去請求網絡。

xrv.setPreLoadCount(5);設置預加載提前數量。以item 爲準

xrv.xrefreshView.setMoveForHorizontal(true);這個很通用,是用來處理手勢衝突的方法。比如你的列表加有橫向滑動的事件,記得設置一下這個屬性。讓你少了很多煩惱。

佈局中注意的地方。如果你的整個列表不是全屏的。可能有title有底部導航時

注意加上聲明

app:isHeightMatchParent=”false”

app:isWidthMatchParent=”false”

  <com.andview.refreshview.XRefreshView
        android:id="@+id/xrefreshview_View"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:isHeightMatchParent="false"
        app:isWidthMatchParent="false">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />
    </com.andview.refreshview.XRefreshView>

鳴謝

感謝作者。作者網名“無板替補” QQ我就不方便直接寫出來了。不過可以去[https://github.com/huxq17/XRefreshView][6]中有他的聯繫方式。如果在使用中遇到什麼問題,可以直接聯繫他。作者挺可愛的。也很熱心。
QQ羣:537610843 (加羣備註:XRefreshView)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章