目錄
一、功能介紹
----1、上拉加載,下拉刷新(可自定義視圖
----2、側滑
----3、item顯示動畫
----4、item粘性
----5、混合使用
----6、DIY使用
二、如何導入
三、如何使用
四、高級設置
五、作者簡介
一、簡介
封裝工作中通常需要使用的列表功能(基於RecycleView),在作者的實際項目中已使用有一年多。主要是爲了讓使用者更加專注於業務邏輯,同時又不失去界面交互性,達到JRecycleView的核心:簡單的讓RecycleView更有趣。
項目源碼 github 傳送門 喜歡的話給個star吧😄
下載試試
藉助的是蒲公英平臺,每天下載次數有限制,請見諒
二、功能介紹:
1、上拉加載,下拉刷新(可自定義視圖)
(1) 框架自帶默認下拉刷新和上拉加載更多效果圖
(2) 自定義下拉刷新效果圖
2、側滑
側滑效果圖(可自行定義菜單)
3、item顯示動畫
(1) 給item添加動畫效果圖(可自行定義,也可使用框架帶的效果)
4、item粘性
(1) 粘性頭部效果
(2) 粘性內容效果
5、混合使用
6、DIY使用
二、如何導入
1、在項目的根gradle中加入 jitpack 倉庫:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
2、在library或app的gradle中添加如下代碼:
dependencies {
implementation 'com.github.zincPower:JRecycleview:latest.release'
}
三、如何使用
1、使用 下拉刷新 和 上拉加載更多 效果的兩個步驟:
(1) 包裝您的Adapter
此過程您的原先使用的Adapter無需任何改動,不會與業務邏輯耦合
// 只需將你所編寫的 Adapter 替換此處的 "YourAdapter" 傳入 JRefreshAndLoadMoreAdapter
JRefreshAndLoadMoreAdapter mAdapter = new JRefreshAndLoadMoreAdapter(this, YourAdapter);
// 設置下拉刷新監聽
mAdapter.setOnRefreshListener(new JRefreshAndLoadMoreAdapter.OnRefreshListener() {
@Override
public void onRefreshing() {
//do something for refresh data
}
});
// 設置加載更多監聽
mAdapter.setOnLoadMoreListener(new JRefreshAndLoadMoreAdapter.OnLoadMoreListener() {
@Override
public void onLoading() {
//do something for load more data
}
});
mJRecycleView.setLayoutManager(new LinearLayoutManager(this));
mJRecycleView.setAdapter(mAdapter);
(2) 佈局中的 RecycleView 需使用JRecycleView
<com.zinc.jrecycleview.JRecycleView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
至此便可使用 下拉刷新 和 上拉加載更多 效果😄
(3) 按需關閉其中一個功能,可通過如下代碼
默認爲開啓 “下拉刷新” 和 “上拉加載更多” 功能
//關閉加載更多
this.mAdapter.setIsOpenLoadMore(false);
//關閉下拉刷新
this.mAdapter.setIsOpenRefresh(false);
(4) “下拉刷新” 狀態更新
// 將 "下拉刷新" 狀態置爲刷新完成 (下拉刷新結束,即數據刷新完時,調用如下代碼結束刷新)
mAdapter.setRefreshComplete(true);
(5) “上拉加載更多” 狀態更新
// 加載完畢,但還未加載全部數據
mAdapter.setLoadComplete();
// 加載出錯
mAdapter.setLoadError();
// 沒有更多數據
mAdapter.setNoMore();
2、使用側滑效果
(1) Adapter 中需要使用側滑的 ViewHolder 繼承 JSwipeViewHolder,按需實現以下幾個方法
// 讓你的 ViewHolder 繼承 JSwipeViewHolder
class MyContentViewHolder extends JSwipeViewHolder {
MyContentViewHolder(View itemView) {
super(itemView);
}
// 傳遞左菜單的佈局,如果不需要左菜單,則重寫該方法即可
@Override
public int getLeftMenuLayout() {
return R.layout.swipe_left_menu;
}
// 傳遞右菜單的佈局,如果不需要右菜單,則重寫該方法即可
@Override
public int getRightMenuLayout() {
return R.layout.swipe_right_menu;
}
// 傳遞你的內容佈局
@Override
public int getContentLayout() {
return R.layout.swipe_content;
}
// 初始化左菜單視圖的控件,
@Override
public void initLeftMenuItem(FrameLayout flLeftMenu) {
tvLeftMenu = flLeftMenu.findViewById(R.id.tv_left_menu);
tvLeftMenuTwo = flLeftMenu.findViewById(R.id.tv_left_menu_two);
}
@Override
public void initRightMenuItem(FrameLayout flRightMenu) {
tvRightMenu = flRightMenu.findViewById(R.id.tv_right_menu);
tvRightMenuTwo = flRightMenu.findViewById(R.id.tv_right_menu_two);
}
@Override
public void initContentItem(FrameLayout flContent) {
tvContent = flContent.findViewById(R.id.tv_content);
}
/**
* 初始化你的視圖控件(包括左右菜單和內容)
*
* 也可以選擇重寫以下方法,在各自的方法中初始化各自負責的控件:
* 1、initLeftMenuItem:初始化左菜單視圖的控件
* 2、initRightMenuItem:初始化右菜單視圖的控件
* 3、initContentItem:初始化內容視圖的控件
**/
@Override
public void initItem(FrameLayout frameLayout) {
}
}
(2) 在 onCreateViewHolder 中,使用的 layout 需爲 JRecycleConfig.SWIPE_LAYOUT
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 你自己定義的對應的type:
//側滑的view,此處必須要傳JRecycleConfig.SWIPE_LAYOUT
return new MyContentViewHolder(
mLayoutInflater.inflate(JRecycleConfig.SWIPE_LAYOUT, parent, false)
);
······ more ······
}
}
(3) 佈局中的 RecycleView 需使用 JRecycleView
<com.zinc.jrecycleview.JRecycleView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
至此便可使用 側滑 效果
(4) 將側滑出來的菜單關閉
myContentViewHolder.getSwipeItemLayout().close();
(5) 禁止側滑
有時因某些業務需求,需要禁止原本有側滑效果的 item 能側滑,則使用下面代碼
myContentViewHolder.getSwipeItemLayout().setSwipeEnable(false);
但需要重新開啓側滑效果時,只需要重新將其設置爲true,即如下
myContentViewHolder.getSwipeItemLayout().setSwipeEnable(true);
3、動畫效果
(1) 將您的 Adapter 繼承 JBaseRecycleAdapter
public class YourAdapter extends JBaseRecycleAdapter<RecyclerView.ViewHolder> {
······
}
(2) 開啓動畫
// 開啓動畫,默認效果 AnimFactory.SLIDE_BOTTOM(從底部進入)
adapter.setOpenAnim(true);
(3) 佈局中的RecycleView需使用JRecycleView
<com.zinc.jrecycleview.JRecycleView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
至此便可使用 動畫效果
(4) 設置動畫效果
// 設置動畫(設置動畫會默認開啓動畫)
adapter.setAnimations(AnimFactory.getAnimSet(AnimFactory.SLIDE_BOTTOM));
4、item粘性
任何一個item 都能支持粘性
tip:如果只是需要粘性功能,不需要使用"改動"或"裝飾"原來的Adapter
(1) 讓 ViewHolder 實現 IStick 接口
class StickHolder extends RecyclerView.ViewHolder implements IStick {
StickHolder(View itemView) {
super(itemView);
}
}
(2) 佈局中的RecycleView需使用JRecycleView
<com.zinc.jrecycleview.JRecycleView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
至此便可使用 item粘性效果
四、高級設置
1、自定義 “刷新視圖” 和 “加載更多視圖”
(1) 自定義 “刷新視圖”
第一步:繼承 IBaseRefreshLoadView
第二步:重寫以下方法
/**
* 初始化 刷新 的視圖
*/
protected View initView(Context context) {
return mLoadView;
}
/**
* 獲取 刷新 的視圖
*/
protected View getLoadView() {
return mLoadView;
}
/**
* 等待上拉 或 等待下拉的狀態 視圖表現
*/
@Override
protected void onPullToAction() {}
/**
* 釋放執行(釋放刷新 或 釋放加載更多)視圖表現
*/
@Override
protected void onReleaseToAction() {}
/**
* 執行中 視圖表現
*/
@Override
protected void onExecuting() {}
/**
* 執行完視圖表現
*/
@Override
protected void onDone() {}
/**
* 初始化視圖,用於加載自己的視圖
* 拉動過程中的回調,可以更加細微的處理動畫(可替換 onPullToAction 和 onReleaseToAction )
*/
@Override
protected void onMoving(MoveInfo moveInfo) {}
第三步:通過以下代碼進行設置自定義的下拉刷新效果
全局生效
// MyRefreshView 即爲你定義的類
JRecycleViewManager.getInstance().setRefreshLoadView(new MyRefreshView(getBaseContext()));
單頁面生效
// MyRefreshView 即爲你定義的類
mAdapter.setRefreshLoadView(new MyRefreshView(getBaseContext()));
(2) 自定義 “上拉加載更多”
第一步:繼承 IBaseLoadMoreView
第二步:重寫以下方法
/**
* 獲取 加載更多 的視圖
*/
@Override
protected View getLoadView() {
return ....;
}
/**
* 初始化 加載更多 的視圖
*/
@Override
protected View initView(Context context) {
return ....;
}
/**
* 上拉加載(上拉超過視圖高度前)
*/
@Override
protected void onPullToAction() {}
/**
* 釋放刷新(上拉超過視圖高度後)
*/
@Override
protected void onReleaseToAction() {}
/**
* 執行中
*/
@Override
protected void onExecuting() {}
/**
* 執行完
*/
@Override
protected void onDone() {}
/**
* 加載出錯
*/
@Override
protected void onError() {}
/**
* 沒有更多數據
*/
@Override
protected void onNoMore() {}
第三步:通過以下代碼進行設置自定義的上拉加載更多效果
全局生效
可在任何地方設置,包括Application,但是隻有運行該代碼後纔有效果,否則運行該代碼前使用的還是默認視圖
JRecycleViewManager.getInstance().setLoadMoreView(LoadMoreView);
單頁面生效
mAdapter.setLoadMoreView(LoadMoreView);
2、自定義動畫
(1) 編寫動畫
第一步:繼承 IBaseAnimation
第二步:重寫下以下方法,編寫自己的動畫邏輯
@Override
protected void init(View view) {}
第三步:通過成員對象 mAnimSet 進行設置動畫
(2) 設置動畫
全局設置
第一步:使用 IBaseAnimation[]{} 將上面的類包裝
可以設置多個,item會按照順序使用動畫
// SlideInTopAnimation 爲你編寫的類
IBaseAnimation[] set = new IBaseAnimation[]{new SlideInTopAnimation()};
第二步:使用動畫
JRecycleViewManager.getInstance().setItemAnimations(set);
單頁面設置
// SlideInTopAnimation 爲你編寫的類
mAdapter.setAnimations(new SlideInTopAnimation());
項目源碼 github 傳送門 喜歡的話給個star吧😄
五、作者簡介
1、個人博客
掘金:https://juejin.im/user/5c3033ef51882524ec3a88ba/posts
csdn:https://blog.csdn.net/weixin_37625173
github:https://github.com/zincPower
2、聯繫方式
微信
3、讚賞
如果覺得該框架對您有所幫助,那就讚賞一下吧😄