RecyclerView下拉刷新上拉加载(一)
listview下拉刷新上拉加载扩展(一) http://blog.csdn.net/baiyuliang2013/article/details/50252561
listview下拉刷新上拉加载扩展(二)-仿美团外卖 http://blog.csdn.net/baiyuliang2013/article/details/50253135
listview下拉刷新上拉加载扩展(三)-仿最新版美团外卖 http://blog.csdn.net/baiyuliang2013/article/details/50854592
前几篇文章讲过listview的自定义下拉刷新上拉加载,最近一直考虑再来个RecyclerView的下拉刷新和上拉加载,毕竟RecyclerView使用的越来越多了,扒了扒网上有关RecyclerView下拉刷新上拉加载的也有很多,不过大多数都满足不了像listview上的那种刷新效果!为此,博主也是煞费苦心地思考了两天,到底该怎样做,才能让RecyclerView的下拉刷新上拉加载像listview一样666呢?
我们知道,listview自带有addHeaderView和addFooterView,很随意的添加头尾布局,而且在重写listview时监听本身即可,但遗憾的是,RecyclerView并不像listview那样方便的添加头尾布局,所以问题就来了,想实现RecyclerView的下拉刷新和上拉加载必然要解决的一件事就是,如何随意的给RecyclerView添加头尾布局?
有的同学可能会说,RecyclerView通过适配器中的viewType添加header和footer不是很好办的事情吗?是的,抛开刷新不说,RecyclerView添加头尾布局确实方便,但这个违背了自定义View的初衷,我们要的是像listview一样重写RecyclerView,而不需要任何其它条件,拿来即用,所以这个方法不可行!那还有什么方法呢,博主思来想去,也就通过重写线性布局LinearLayout,来顺序添加headerview,RecyclerView,footerview最适合不过了,然后监听LinearLayout的触摸事件可达到效果!
好了,思路确定后,开始实现吧!
*重写LinearLayout,并在构造方法中,inflate出headerview,RecyclerView,footerview,并依次添加!(步骤跟前几篇的listview刷新相似);
*监听触摸事件,结合上几篇listview的处理方法,监听OnTouch,不过悲催的是,博主忘记了一点,现在重写的是LinearLayout即一个ViewGroup,RecyclerView只是LinearLayout的一个子View,下拉时的效果还凑合,但是不松手再上滑时就悲催了,因为RecyclerView跟headerview和footerview并不像listview那样是一体的,所以效果可想而知了,因此只监听onTouch当然是不行的!
好吧,那现在我们还得把一把事件分发机制了。。。(事件分发机制,博主也不会细讲,因为博主在迷迷糊糊的呢。万一讲错了,你们削我咋弄?),上一张触摸事件传递图吧:
对事件分发机制有点经验的应该很容易看懂了,结合我们的项目,那么在触摸RecyclerView的事件传递就是:
触摸RecyclerView:
->LinearLayout的dispatchTouchEvent
->LinearLayout的onInterceptTouchEvent
->RecyclerView的dispatchTouchEvent
->RecyclerView的onTouchEvent
->LinearLayout的onTouchEvent
关于事件分发机制不懂得同学可以自行百度了,注意一点,最小View是没有onInterceptTouchEvent拦截事件的!
好了,事件分发弄通了,往下进行呗!但俗话说的好,不要重复发明轮子,呵呵,所以博主也参考了开源的pulltorefresh中的部分代码(当然,大家在使用轮子的时候一定要搞懂原理,达到举一反三地效果,切不可奉行糊里糊涂的拿来主义),结合本项目中的RecyclerView完成了像listview那般的下拉刷新和上拉加载!
看下实现效果吧:
布局代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.byl.recyclerview.view.PullRecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>
</RelativeLayout>
实现代码:
recyclerView = (PullRecyclerView) findViewById(R.id.recyclerView);
recyclerView.setOnHeaderRefreshListener(this);
recyclerView.setOnFooterRefreshListener(this);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
myAdapter = new MyAdapter();
recyclerView.setAdapter(myAdapter);
本例中没有设置禁止下拉上拉的方法,大家可根据需要自行设置一个方法,在触摸事件中判断即可!当item数量不满一屏时可以禁止上拉加载!
ASdemo下载地址:http://download.csdn.net/detail/baiyuliang2013/9531776
RecyclerView下拉刷新上拉加载(一)的更多相关文章
- Android 下拉刷新上啦加载SmartRefreshLayout + RecyclerView
在弄android刷新的时候,可算是耗费了一番功夫,最后发觉有现成的控件,并且非常好用,这里记录一下. 原文是 https://blog.csdn.net/huangxin112/article/de ...
- SwipeRefreshLayout实现下拉刷新上滑加载
1. 效果图 2.RefreshLayout.java package myapplication.com.myapplication; import android.content.Context; ...
- 移动端下拉刷新上拉加载-mescroll.js插件
最近无意间看到有这么一个上拉刷新下拉加载的插件 -- mescroll.js,个人感觉挺好用的,官网地址是:http://www.mescroll.com 然后我就看了一下文档,简单的写了一个小dem ...
- 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载
title: 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载 tags: -RecyclerView,下拉刷新,上拉加载更多 grammar_cjkRuby: true - ...
- RecyclerView下拉刷新上拉加载(三)—对Adapter的封装
RecyclerView下拉刷新上拉加载(一) http://blog.csdn.net/baiyuliang2013/article/details/51506036 RecyclerView下拉刷 ...
- RecyclerView下拉刷新上拉加载(二)
listview下拉刷新上拉加载扩展(一) http://blog.csdn.net/baiyuliang2013/article/details/50252561 listview下拉刷新上拉加载扩 ...
- MaterialRefreshLayout+ListView 下拉刷新 上拉加载
效果图是这样的,有入侵式的,非入侵式的,带波浪效果的......就那几个属性,都给出来了,自己去试就行. 下拉刷新 上拉加载 关于下拉刷新-上拉加载的效果,有许许多多的实现方式,百度了一下竟然有几十种 ...
- 自定义ListView下拉刷新上拉加载更多
自定义ListView下拉刷新上拉加载更多 自定义RecyclerView下拉刷新上拉加载更多 Listview现在用的很少了,基本都是使用Recycleview,但是不得不说Listview具有划时 ...
- ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多
ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多 package com.example.ListViewDragItem; import android.app.Ac ...
随机推荐
- bzoj3597[Scoi2014]方伯伯运椰子 01分数规划+spfa判负环
3597: [Scoi2014]方伯伯运椰子 Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 594 Solved: 360[Submit][Statu ...
- NTT+多项式求逆+多项式开方(BZOJ3625)
定义多项式$h(x)$的每一项系数$h_i$,为i在c[1]~c[n]中的出现次数. 定义多项式$f(x)$的每一项系数$f_i$,为权值为i的方案数. 通过简单的分析我们可以发现:$f(x)=\fr ...
- Centos7发送邮件
Centos7发送邮件 $ yum -y install mailx sendmail $ vim /etc/mail.rc set from=xxxxxx@.com set smtp=smtp..c ...
- 如何让Mac、Windows可以互相远程
您可以通过Mac来远程Windows桌面:也可通过Windows来远程Mac界面:甚至还可以通过iOS或Android来远程Mac或Windows. Windows的操作方法,以Windows XP ...
- tree的遍历--广度优先遍历
一.二叉树demo var tree = { value: '一', left: { value: '二', left: { value: '四', right: { value: '六' } } } ...
- ubuntu查看IO
在命令行直接 cp 一个比较大的文件时,由于没有提示信息,总感觉很不放心,可以通过查看IO的方式确认cp操作的进展程度. 查看IO可以使用iostat命令,但是前提是要安装sysstat sudo a ...
- WebRTC 音频算法 附完整C代码
WebRTC提供一套音频处理引擎, 包含以下算法: AGC自动增益控制(Automatic Gain Control) ANS噪音抑制(Automatic Noise Suppression) AEC ...
- 两个activity之间透明过渡效果和经验
来看下效果图: 大致效果解释: 1. 当用户点击登录时logo下滑一定距离 2. 下滑后旋转90时 变化图标 3. 继续旋转90度 4. 然后移动到左上角 透明度渐变到上个activity 最后销毁当 ...
- Dynamics CRM 查找字段下拉的最多10个选项的排序规则
原文链接来自DTCCh论坛http://dynamics.ms-talent.com.cn/bbs/content/?id=1406&catogory=CRM 如果你是从事dynamics c ...
- Objective-C特有类型——id
Objective-C特有类型--id OC里,id和int.double等一样,是一个类型 不同的是: id是一个万能指针,能指向/操作任何OC对象 相当于 (NSObject *) 用法 id i ...