Recyclerview_helper多功能封装,让你的应用更加自如

前言

为忻城等地区用户提供了全套网页设计制作服务,及忻城网站建设行业解决方案。主营业务为网站建设、做网站、忻城网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

RecyclerView作为列表使用,在项目中的应用场景实在是太普遍了。针对项目应用,主要使用了RecyclerView的单或多类型Item,点击/长按事件,ItemAnimator动画效果以及上拉加载、下拉刷新。recyclerview_helper就是针对以上应用场景进行的封装与使用,避免在项目使用中重复的敲代码以及依赖多个库或者自定义实现等复杂方式。

介绍

如上所示,recyclerview_helper针对不同应用场景封装了不同的功能。

具体功能如下:

1.封装了ViewHolder以及Adapter,避免每次都要重复写创建ViewHolder以及重写onCreateViewHolder,onBindViewHolder方法,支持单/多类型Item。

2.封装了OnItemClickListener以及OnItemLongClickListener,不必每次写接口,定义回调。仅支持对Item的点击事件。

3.具有各种炫酷的动画效果,功能装饰者模式封装Adapter添加初始化动画效果 ,以及自定义ItemAnimator实现各种炫酷的Item增删动画效果。

4.支持添加头尾布局,以及支持下拉刷新和上拉加载更多功能。同时支持自定义下拉刷新布局及动画,以及上拉加载更多的布局,可实现各种炫酷效果,跟随你的想象放飞。

使用

1.添加依赖

①.在项目的 build.gradle 文件中添加

 
 
 
 
  1. allprojects {
  2.         repositories {
  3.             ...
  4.             maven { url 'https://jitpack.io' }
  5.         }
  6.     } 

②.在 module 的 build.gradle 文件中添加依赖

 
 
 
 
  1. dependencies {
  2.     compile 'com.github.LRH1993:recyclerview_helper:V1.0.3'

2.单/多类型Item使用

单类型

 
 
 
 
  1. CommonAdapter mAdapter = new CommonAdapter(this, R.layout.item_common, mDatas) {            
  2.                  @Override
  3.             public void convert(BaseViewHolder holder, int position) {
  4.                 holder.setText(R.id.tv_content,mDatas.get(position));                
  5.                         int number = new Random().nextInt(3);
  6.                 holder.setImageResource(R.id.iv_content,mImageRes[number]);
  7.             }
  8.         };
  9.         mRecyclerView.setAdapter(mAdapter); 

通过实现CommonAdapter,传入context,布局以及数据,然后实现convert方法,设置view的显示数据就完成了。很简洁方便。

多类型

 
 
 
 
  1. MultiItemTypeSupport support = new MultiItemTypeSupport() {            
  2.                  @Override
  3.             public int getLayoutId(int itemType) {                
  4.                  if (itemType == TYPE_HEAD) {                    
  5.                      return R.layout.item_special;
  6.                 } else {                    
  7.                      return R.layout.item_common;
  8.                 }
  9.             }            
  10.             @Override
  11.             public int getItemViewType(int position, String s) {                
  12.                  if (position%3==0&& position>0) {                    
  13.                      return TYPE_HEAD;
  14.                 } else {                    
  15.                    return TYPE_COMMON;
  16.                 }
  17.             }
  18.         };
  19. -----------------------------------------------------------------------------------------------------------------------------
  20.  MultiItemCommonAdapter mAdapter = new MultiItemCommonAdapter(this, mDatas, support) {            
  21.             @Override
  22.             public void convert(BaseViewHolder holder, int position) {                
  23.                                  if (position%3==0&& position>0) {
  24.                     holder.setImageResource(R.id.iv_head,R.drawable.multi_image);
  25.                 } else {
  26.                     holder.setText(R.id.tv_content,mDatas.get(position));                    
  27.                                  int number = new Random().nextInt(3)+3;
  28.                     holder.setImageResource(R.id.iv_content,mImageRes[number]);
  29.                 }
  30.             }
  31.         };
  32.         mRecyclerView.setAdapter(mAdapter); 

和单类型的区别就是需要实现MultiItemTypeSupport,在MultiItemCommonAdapter对象中传入实现的该对象,该对象完成两个方法,功能是通过类型判别Item布局以及通过位置和数据判断返回类型。通过这个对象,避免我们在Adapter中进行类别判断的书写。

该部分实现参考了鸿洋大神对RecyclerView的封装。

3.事件监听使用

事件监听的使用就比较简单了,和正常使用一样。

 
 
 
 
  1. adapter.setOnItemClickListener(new CommonAdapter.OnItemClickListener() {            
  2.                 @Override
  3.             public void onItemClick(View view, RecyclerView.ViewHolder holder, int position) {
  4.                 System.out.println("点击");
  5.                 showMyDialog("响应点击事件");
  6.             }
  7.         });
  8.         adapter.setOnItemLongClickListener(new CommonAdapter.OnItemLongClickListener() {            
  9.                  @Override
  10.             public boolean onItemLongClick(View view, RecyclerView.ViewHolder holder, int position) {
  11.                 showMyDialog("响应长按事件");                
  12.                         return false;
  13.             }
  14.         }); 

4.动画使用

gif录制效果不太明显,实际手机上看着效果还是不错的。

 
 
 
 
  1. mRecyclerView.setItemAnimator(new LandingAnimator());
  2.         ScaleInAnimationAdapter scaleAdapter = new ScaleInAnimationAdapter(adapter);
  3.         scaleAdapter.setFirstOnly(false);
  4.         scaleAdapter.setDuration(500);
  5.         mRecyclerView.setAdapter(scaleAdapter); 

动画效果分两种:

第一种:adapter初始化item的动画效果

第二种:ItemAnimator定义的动画效果

第一种动画效果使用了装饰者模式,需要再封装一层,然后通过setAdapter添加进去。

第二种直接和平时使用一样。

除此之外,ItemAnimator还有以下高级功能:

设置动画时长

 
 
 
 
  1. mRecyclerView.getItemAnimator().setAddDuration(1000);
  2. mRecyclerView.getItemAnimator().setRemoveDuration(1000);
  3. mRecyclerView.getItemAnimator().setMoveDuration(1000);
  4. mRecyclerView.getItemAnimator().setChangeDuration(1000); 

插值器

 
 
 
 
  1. SlideInLeftAnimator animator = new SlideInLeftAnimator();
  2. animator.setInterpolator(new OvershootInterpolator());
  3. mRecyclerView.setItemAnimator(animator); 

也可以通过自定义AnimateViewHolder实现类,实现其他动画效果。

Adapter也有一些高级功能:

动画时长

 
 
 
 
  1. AlphaInAnimationAdapter alphaAdapter = new AlphaInAnimationAdapter(adapter);
  2. alphaAdapter.setDuration(1000);
  3. mRecyclerView.setAdapter(alphaAdapter); 

插值器

  1. AlphaInAnimationAdapter alphaAdapter = new AlphaInAnimationAd

    标题名称:Recyclerview_helper多功能封装,让你的应用更加自如
    当前URL:http://www.shufengxianlan.com/qtweb/news34/279584.html

    网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联