美文网首页Android UI半栈工程师Android 开发技术分享
简单地让RecycleView更丰富——JRecycleView

简单地让RecycleView更丰富——JRecycleView

作者: 9dfaf364d57f | 来源:发表于2018-04-19 17:34 被阅读633次

前言

闲来无事,封装了一个JRecycleView框架,主要是为了提升用户体验,降低代码耦合度并且节约开发时间。目前框架有如下功能,后续还会继续完善和补充,欢迎各位大大提需求共同维护。

现有功能:
1、上拉加载,下拉刷新(可自定义视图)
2、侧滑
3、item显示动画

本框架具有较好的扩展性,框架中的“下拉刷新”、“上拉加载”的视图以及动画、侧滑的菜单数量、item的动画均可自己定义,而且可以进行相应的全局设置。如果您现在已经迫不及待可以先移步后面的高级设置。

目录
一、如何导入
二、如何使用
三、高级设置
四、小结

先上四张代表性的效果图,图稍微多些,请见谅:


默认视图
自定义视图
侧滑
item动画

一、如何导入

1、在项目的根gradle中加入如下代码:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

2、在library或app的gradle中添加如下代码:

dependencies {
    compile 'com.github.zincPower:JRecycleview:0.1.2'
}

二、如何使用

1、使用下拉刷新上拉加载更多效果的两个步骤:

(1)包装您的adapter,此过程您的adapter中的逻辑无需任何改动

//只需将你所编写的adapter传入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">

</com.zinc.jrecycleview.JRecycleView>

如此便可使用下拉刷新上拉加载更多效果,如果需要关闭其中“刷新”或“加载更多”功能,可通过如下代码进行设置

//关闭加载更多
this.mAdapter.setIsOpenLoadMore(false);
//关闭下拉刷新
this.mAdapter.setIsOpenRefresh(false);

(3)更多操作
数据刷新完成时,调用如下代码结束刷新

//如果有上拉加载更多,调用此句重置上拉加载状态
mAdapter.resetLoadMore();

mAdapter.setRefreshComplete(true);

上拉加载更多完成后的操作

//加载完毕,但还未加载全部数据
mAdapter.setLoadComplete();

//加载出错
mAdapter.setLoadError();

//没有更多数据
mAdapter.setNoMore();

2、使用侧滑效果

(1)adapter中需要使用侧滑的ViewHolder继承JSwipeViewHolder,需要实现以下几个方法

class MyContentViewHolder extends JSwipeViewHolder {

    public MyContentViewHolder(View itemView) {
        super(itemView);
    }

    //传递左菜单的布局,如果该ViewHolder不需要左菜单则传递 NONE(该值在父类中已定义) 
    @Override
    public int getLeftMenuLayout() {
        return R.layout.swipe_left_menu;
    }

    //传递右菜单的布局,如果该ViewHolder不需要右菜单则传递 NONE(该值在父类中已定义) 
    @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) {
    }

    //初始化右菜单视图的控件
    @Override
    public void initRightMenuItem(FrameLayout flRightMenu) {
        
    }

    //初始化内容视图的控件
    @Override
    public void initContentMenuItem(FrameLayout flContent) {
        
    }
}

(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">

</com.zinc.jrecycleview.JRecycleView>

如此便可使用侧滑效果

3、动画效果

(1)将您的 adapter 继承 JBaseRecycleAdapter

public class YourAdapter extends JBaseRecycleAdapter<RecyclerView.ViewHolder> {
    ······
}

(2)开启动画

//设置动画(设置动画会默认开启动画)
adapter.setAnimations(AnimFactory.getAnimSet(AnimFactory.SLIDE_BOTTOM));
//开启动画(如果不设置动画,便使用默认效果 AnimFactory.SLIDE_BOTTOM )
adapter.setOpenAnim(true);

(3)布局中的RecycleView需使用JRecycleView

<com.zinc.jrecycleview.JRecycleView
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</com.zinc.jrecycleview.JRecycleView>

如此便可使用动画效果

高级设置

1、自定义 刷新视图 和 加载更多 视图

(1)继承 IBasePullRefreshLoadView(下拉刷新)或 IBaseLoadMoreView(上拉加载)类

IBasePullRefreshLoadView(下拉刷新)需重写以下方法

//获取 刷新 的视图
View getLoadView();

//初始化 刷新 的视图
void initView();

//下拉刷新(下拉超过视图高度前)
void onPullToAction();

//释放刷新(下拉超过视图高度后)
void onReleaseToAction();

//执行刷新
void onExecuting();

//执行完
void onDone();

//这个方法是下拉过程中(手指未释放)回调,
//是为了更加细致的控制视图中的动画效果(可替换onPullToAction和onReleaseToAction)
void onMoving(MoveInfo moveInfo);

IBaseLoadMoreView(上拉加载)需重写以下方法

//获取 加载更多 的视图
View getLoadView();

//初始化 加载更多 的视图
void initView();

//上拉加载(上拉超过视图高度前)
void onPullToAction();

//上拉刷新(上拉超过视图高度后)
void onReleaseToAction();

//执行中
void onExecuting();

//执行完
void onDone();

//这个方法是下拉过程中(手指未释放)回调,
//是为了更加细致的控制视图中的动画效果(可替换onPullToAction和onReleaseToAction)
void onMoving(MoveInfo moveInfo);

//加载出错
void onError();

//没有更多数据
void onNoMore();

(2)将自定义的视图设置(全局使用和部分视图)
全局设置,可在任何地方设置(最好为Application),只有在运行了该代码后才有效果,否则该代码运行前使用的还是默认视图

//下拉刷新
JRecycleViewManager.getInstance().setBasePullRefreshLoadView(new MyRefreshView(getBaseContext()));
//上拉加载
JRecycleViewManager.getInstance().setBaseLoadMoreView(LoadMoreView);

针对某个View做自定义视图

//下拉刷新
this.mAdapter.setRefreshLoadView(new MyRefreshView(this));
//上拉加载
this.mAdapter.setLoadMoreView(LoadMoreView);

2、自定义动画

(1)继承IBaseAnimation,重写init(View view)方法,编写自己的动画逻辑

public class SlideInTopAnimation extends IBaseAnimation {
    @Override
    protected void init(View view) {
        //定义你的动画,使用addAnimTogether方法,将动画添加进动画组
    }
}

(2)使用IBaseAnimation[]{}将第一步的类包装,可以设置多个,item会按照顺序使用动画

IBaseAnimation[] set = new IBaseAnimation[]{new SlideInTopAnimation()};

(3)使用动画

//执行了这句后,全部的默认动画遍使用了该动画
JRecycleViewManager.getInstance().setItemAnimations(YOUR ANIM);

//针对某个视图使用特定动画
adapter.setAnimations(AnimFactory.getAnimSet(AnimFactory.SLIDE_BOTTOM));

github:https://github.com/zincPower/JRecycleView

四、小结

第一次封装框架,感慨万千,框架中运用了些设计模式,例如“装饰模式”、“简单工厂模式”等,学的越久,就越想跳出CV的过程,框架中可能有设计的不是非常的地方,如果有什么问题或是想法,可于评论区留言或github上跟我联系。如果您喜欢这框架,github上给个star或给文章一个❤️,就是对我最大的鼓励和支持。

相关文章

网友评论

本文标题:简单地让RecycleView更丰富——JRecycleView

本文链接:https://www.haomeiwen.com/subject/ojowkftx.html