1. 程式人生 > >帶頭尾和動畫的下拉重新整理RecyclerView

帶頭尾和動畫的下拉重新整理RecyclerView

效果預覽,嗯…看起來有點卡,截圖軟體的問題:

帶動畫的下拉重新整理RecyclerView

上圖中演示了三種不同的佈局和下拉效果,三種佈局和三種下拉效果可以通過Header的設定任意組合。

圖中普通列表是ListView樣式,沒有設定Header和Footer,使用預設的下拉重新整理和上拉載入。
宮格列表使用的是自定義Header和Footer的下拉重新整理和上拉上拉載入,並設定了下拉使放大的圖片。
瀑布流列表使用的是自定義Header和Footer的下拉重新整理和上拉上拉載入,沒有設定了下拉使放大的圖片,使用預設的重新整理動畫。

用法:

Gradle:

dependencies {
    compile 'com.android.support:recyclerview-v7:23.1.0'
    compile 'com.sch.rfview:AnimRefreshRecyclerView:
[email protected]
' }

Eclipse的同學們可以自己下載原始碼拷貝java檔案到自己的工程(別忘了引用RecyclerView的包哦)。
程式碼中的配置參考下面的用法程式碼片段,除了RecyclerView自帶的方法,其他方法都是可選的。

根據列表的不同效果選擇不同的佈局管理器:

// 使用重寫後的線性佈局管理器
mRecyclerView.setLayoutManager(new AnimRFLinearLayoutManager(this));

// 使用重寫後的格子布局管理器
mRecyclerView.setLayoutManager(new AnimRFGridLayoutManager(this
, 2)); // 使用重寫後的瀑布流佈局管理器 mRecyclerView.setLayoutManager(new AnimRFStaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL));

根據不同的佈局管理器設定分割線:

// 設定列表佈局的分割線
mRecyclerView.addItemDecoration(new DividerItemDecoration(context,
        mAnimRFLinearLayoutManager.getOrientation(), true));

// 設定網格或者瀑布流佈局的分割線
mRecyclerView.addItemDecoration(new DividerGridItemDecoration(context, true));

設定Header和Footer:

// 頭部
headerView = LayoutInflater.from(this).inflate(R.layout.header_view, null);
// 腳部
footerView = LayoutInflater.from(this).inflate(R.layout.footer_view, null);

// 新增頭部和腳部,如果不新增就使用預設的頭部和腳部(頭部可以有多個)
mRecyclerView.addHeaderView(headerView);
// 設定頭部的最大拉伸倍率,預設1.5f,必須寫在setHeaderImage()之前
mRecyclerView.setScaleRatio(2.0f);
// 設定下拉時拉伸的圖片,不設定就使用預設的
mRecyclerView.setHeaderImage((ImageView) headerView.findViewById(R.id.iv_hander));
mRecyclerView.addFootView(footerView);

可以通過addHeaderView()setHeaderImage()方法任意組合下拉效果,可以呼叫多次addHeaderView()方法新增多個頭部,但是setHeaderImage()方法最多被呼叫一次。
最多呼叫一次addFootView()方法,即最多設定一個FooterView。

其他設定:

// 設定重新整理動畫的顏色(可選)
mRecyclerView.setColor(Color.RED, Color.WHITE);
// 設定頭部恢復動畫的執行時間,預設500毫秒(可選)
mRecyclerView.setHeaderImageDurationMillis(1200);
// 設定拉伸到最高時頭部的透明度,預設0.5f(可選)
mRecyclerView.setHeaderImageMinAlpha(0.6f);

// 設定介面卡
mRecyclerView.setAdapter(new MyAdapter());

// 設定重新整理和載入更多資料的監聽,分別在onRefresh()和onLoadMore()方法中執行重新整理和載入更多操作
mRecyclerView.setLoadDataListener(new AnimRFRecyclerView.LoadDataListener() {
    @Override
    public void onRefresh() {
        // 開啟執行緒重新整理資料
        new Thread(new MyRunnable()).start();
    }

    @Override
    public void onLoadMore() {
        // 開啟線載入更多資料
        new Thread(new MyRunnable()).start();
    }
});

手動重新整理

如果想第一次進入介面時就顯示載入資料的動畫,需要使用手動重新整理的方法。此方法需要在其他設定完成後呼叫,具體使用可以看這裡

mRecyclerView.setRefresh(true);

在重新整理和載入過更多完成之後呼叫程式碼停止動畫:

// 重新整理完成後呼叫,必須在UI執行緒中
mRecyclerView.refreshComplate();

// 載入更多完成後呼叫,必須在UI執行緒中
mRecyclerView.loadMoreComplate();

禁止重新整理

如果不想使用自帶的重新整理效果,而想要使用SwipRefreshLayout做重新整理,可使用以下程式碼禁止自帶的重新整理效果

mRecyclerView.setRefreshEnable(false);

Tips:

  • 若在使用過程中發現adapter.notifyDataSetChange()等更新資料的方法無效,可使用recyclerView.getAdapter()獲取當前使用的Adapter,並使用獲取到到Adapter更新資料。

    EDN

        歡迎大家提出改進建議和意見