RecyclerView 滑动检测 (上滑 up)(下滑 down)(顶部 top)(底部 bottom)
2015-10-19 17:29
489 查看
RecyclerView 给我们的可以检测滑动事件的接口 只有 一个方法
RecyclerView.OnScrollListener中有一个方法 叫 onScrolled()
其中dx,dy分别表示 在x方向和y方向滑动的值,这个值有正负。
如果
通过这几个参数就可以监听 滑动方向的状态。
判断的依据就在 代码注释的地方,通过比较上面三个参数来判断
如果 当前
同理,可以通过第一个可见的item的位置来判断 是否在 顶部 top。
loading只是一个flag 用来避免重复加载。
通过重写 OnScrollListener来判断。
这个方法利用了View的一个方法。
这个方法是判断View在竖直方向是否还能 向上,向下 滑动。
根据上面的例子,应该可以看出。 -1 表示 向上, 1 表示向下。
同理还有
实现这个自定义的Listener之后你就可以在RecycyclerView的setOnScrollListener方法中使用了,像系统的使用方法一样。
参考链接
recyclerview.setOnScrollListener()或者
recyclerview.addOnScrollListener()set方法将会被弃用 deprecated 最好使用add方法但是这个也可以根据自己情况,如果自己当前的api中set方法没有被弃用,不存在add方法。就只能使用set方法了。
监听 上滑,下滑
这些都不是重点,接下来就分析如何监听,RecyclerView的滑动。RecyclerView.OnScrollListener中有一个方法 叫 onScrolled()
public void onScrolled(RecyclerView recyclerView, int dx, int dy){}
其中dx,dy分别表示 在x方向和y方向滑动的值,这个值有正负。
如果
dx>0则表示 右滑 ,
dx<0表示 左滑
dy <0表示 上滑,
dy>0表示下滑
通过这几个参数就可以监听 滑动方向的状态。
监听 顶部,底部
但是还有两种情况,不能通过 dx,dy直接判断出来。那就是 顶部 top状态,底部 bottom状态。需要借助一些其他参数,结合来判断。第一种方法
第一种方法,在ListView中也经常使用,就是 firstvisibleItem , visibleItemCount,totalItemCount。 也就是 当前屏幕 首个 可见的 Item 的position,当前屏幕 可见的 Item 个数,Item总共的个数。private boolean loading = true; int pastVisiblesItems, visibleItemCount, totalItemCount; mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { visibleItemCount = mLayoutManager.getChildCount(); totalItemCount = mLayoutManager.getItemCount(); pastVisiblesItems = mLayoutManager.findFirstVisibleItemPosition(); if (loading) { if ( (visibleItemCount + pastVisiblesItems) >= totalItemCount) { // 判断点 loading = false; Log.v("...", "Last Item Wow !"); } } } });
判断的依据就在 代码注释的地方,通过比较上面三个参数来判断
如果 当前
第一个可见item的位置+
当前可见的item个数>=
item的总个数这样就可以判断出来,是在底部了,bottom。
同理,可以通过第一个可见的item的位置来判断 是否在 顶部 top。
loading只是一个flag 用来避免重复加载。
第二种方法
通过View的滑动属性来判断,是否在顶部,或者底部。这种方法的实现非常简便。通过重写 OnScrollListener来判断。
public abstract class OnVerticalScrollListener extends RecyclerView.OnScrollListener { @Override public final void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (!recyclerView.canScrollVertically(-1)) { onScrolledToTop(); } else if (!recyclerView.canScrollVertically(1)) { onScrolledToBottom(); } else if (dy < 0) { onScrolledUp(); } else if (dy > 0) { onScrolledDown(); } } public void onScrolledUp() {} public void onScrolledDown() {} public void onScrolledToTop() {} public void onScrolledToBottom() {} }
这个方法利用了View的一个方法。
public boolean canScrollVertically (int direction)
这个方法是判断View在竖直方向是否还能 向上,向下 滑动。
根据上面的例子,应该可以看出。 -1 表示 向上, 1 表示向下。
同理还有
public boolean canScrollHorizontally (int direction)方法用来判断 水平方向的滑动。 具体的使用方法可以参考 官方文档
实现这个自定义的Listener之后你就可以在RecycyclerView的setOnScrollListener方法中使用了,像系统的使用方法一样。
参考链接
相关文章推荐
- CSS中的滑动门技术
- js实现的简洁网页滑动tab菜单效果代码
- javascript制作的滑动图片菜单
- JavaScript实现图片DIV竖向滑动的方法
- JS+CSS实现滑动切换tab菜单效果
- jquery实现相册一下滑动两次的方法
- 基于jquery固定于顶部的导航响应浏览器滚动条事件
- 用jquery实现动画跳到顶部和底部(这个比较简单)
- jquery实现标题字体变换的滑动门菜单效果
- jQuery创建平滑的页面滚动(顶部或底部)
- 基于jQuery滑动杆实现购买日期选择效果
- jQuery实现图片与文字描述左右滑动自动切换的方法
- 基于jQuery实现的向下滑动二级菜单效果代码
- Jquery实现顶部弹出框特效
- jquery实现导航固定顶部的效果仿蘑菇街
- jquery实现左右滑动菜单效果代码
- jQuery层动画定位滑动效果的方法
- jQuery实现MSN中文网滑动Tab菜单效果代码
- Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
- 解决VMware View虚拟桌面“黑屏”问题 推荐