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

二、联系方式

微信

三、赞扬

若是以为该框架对您有所帮助,那就赞扬一下吧😄

相关文章
相关标签/搜索