JRecycleView——簡單的讓RecycleView更有趣

目錄
1、功能介紹
----一、上拉加載,下拉刷新(可自定義視圖
----二、側滑
----三、item顯示動畫
----四、item粘性
----五、混合使用
----六、DIY使用
2、如何導入
3、如何使用
4、高級設置
5、做者簡介
java

1、簡介

封裝工做中一般須要使用的列表功能(基於RecycleView),在做者的實際項目中已使用有一年多。主要是爲了讓使用者更加專一於業務邏輯,同時又不失去界面交互性,達到JRecycleView的核心:簡單的讓RecycleView更有趣android

項目源碼 github 傳送門 喜歡的話給個star吧😄git

下載試試 github

藉助的是蒲公英平臺,天天下載次數有限制,請見諒bash

2、功能介紹:

一、上拉加載,下拉刷新(可自定義視圖)

(1) 框架自帶默認下拉刷新和上拉加載更多效果圖

(2) 自定義下拉刷新效果圖

二、側滑

側滑效果圖(可自行定義菜單) 微信

三、item顯示動畫

(1) 給item添加動畫效果圖(可自行定義,也可以使用框架帶的效果)

四、item粘性

(1) 粘性頭部效果

(2) 粘性內容效果

五、混合使用

六、DIY使用

在這裏插入圖片描述

2、如何導入

一、在項目的根gradle中加入 jitpack 倉庫:

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}
複製代碼

二、在library或app的gradle中添加以下代碼:

dependencies {
    implementation 'com.github.zincPower:JRecycleview:latest.release'
}
複製代碼

3、如何使用

一、使用 下拉刷新上拉加載更多 效果的兩個步驟:

(1) 包裝您的Adapter

此過程您的原先使用的Adapter無需任何改動,不會與業務邏輯耦合app

// 只需將你所編寫的 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) 按需關閉其中一個功能,可經過以下代碼

默認爲開啓 "下拉刷新" 和 "上拉加載更多" 功能maven

//關閉加載更多
this.mAdapter.setIsOpenLoadMore(false);
//關閉下拉刷新
this.mAdapter.setIsOpenRefresh(false);
複製代碼

(4) "下拉刷新" 狀態更新

// 將 "下拉刷新" 狀態置爲刷新完成 (下拉刷新結束,即數據刷新完時,調用以下代碼結束刷新)
mAdapter.setRefreshComplete(true);
複製代碼

(5) "上拉加載更多" 狀態更新

// 加載完畢,但還未加載所有數據
mAdapter.setLoadComplete();

// 加載出錯
mAdapter.setLoadError();

// 沒有更多數據
mAdapter.setNoMore();
複製代碼

二、使用側滑效果

(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);
    }

    /** * 初始化你的視圖控件(包括左右菜單和內容) * * 也能夠選擇重寫如下方法,在各自的方法中初始化各自負責的控件: * 一、initLeftMenuItem:初始化左菜單視圖的控件 * 二、initRightMenuItem:初始化右菜單視圖的控件 * 三、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"/>
複製代碼

至此即可使用 側滑 效果ide

(4) 將側滑出來的菜單關閉

myContentViewHolder.getSwipeItemLayout().close();
複製代碼

(5) 禁止側滑

有時因某些業務需求,須要禁止本來有側滑效果的 item 能側滑,則使用下面代碼

myContentViewHolder.getSwipeItemLayout().setSwipeEnable(false);
複製代碼

但須要從新開啓側滑效果時,只須要從新將其設置爲true,即以下

myContentViewHolder.getSwipeItemLayout().setSwipeEnable(true);
複製代碼

三、動畫效果

(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));
複製代碼

四、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粘性效果

4、高級設置

一、自定義 "刷新視圖" 和 "加載更多視圖"

(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);
複製代碼

二、自定義動畫

(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吧😄

5、做者簡介

一、我的博客

掘金:juejin.im/user/5c3033…

csdn:blog.csdn.net/weixin_3762…

github:github.com/zincPower

二、聯繫方式

微信

三、讚揚

若是以爲該框架對您有所幫助,那就讚揚一下吧😄

相關文章
相關標籤/搜索