帶頭尾和動畫的下拉重新整理RecyclerView
阿新 • • 發佈:2018-12-31
效果預覽,嗯…看起來有點卡,截圖軟體的問題:
上圖中演示了三種不同的佈局和下拉效果,三種佈局和三種下拉效果可以通過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
歡迎大家提出改進建議和意見