RecyclerView 滑动检测 (上滑 up)(下滑 down)(顶部 top)(底部 bottom)e
来源:互联网 发布:开票软件重装 编辑:程序博客网 时间:2024/05/18 03:49
RecyclerView 滑动检测 (上滑 up)(下滑 down)(顶部 top)(底部 bottom)
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方法中使用了,像系统的使用方法一样。
参考链接
- RecyclerView 滑动检测 (上滑 up)(下滑 down)(顶部 top)(底部 bottom)
- RecyclerView 滑动检测 (上滑 up)(下滑 down)(顶部 top)(底部 bottom)e
- 安卓RecyclerView视图滑动对齐不到顶部(底部)的校准
- Android - ListView判断滑动到了最底部和最顶部,以及上滑、下滑
- [msdn]Top-Down vs. Bottom-Up DIBs
- Top-down and bottom-up parser
- Top-Down vs. Bottom-Up DIBs
- Top-Down vs. Bottom-Up DIBs
- RecyclerView检测滑动到顶部或底部的代码示例
- 纯CSS实现滑动效果(Slide Up & Slide Down)
- Android ListView监听上滑、下滑、滑到顶部/底部
- 上滑 显示底部 下滑 隐藏顶部 协调者布局
- jquery 向上(顶部),向下(底部)滑动
- ListView自动滑动到顶部(底部)的方法总结
- ListView自动滑动到顶部(底部)的方法总结
- ScrollView滑动到底部继续向上滑和滑动到顶部继续向下滑
- Android 解析RecyclerView(2)——带顶部View和底部View的RecyclerView
- js判断滚动条是否已到页面最底部或顶部实例-拓展(逐渐-自动下滑滚动)
- docker 的安装以及常见使用的命令
- Unreal 4 BumpOffset Material 凸块偏移
- 小白成长日记
- jQuery常用的一些方法
- 4行CSS实现【表格内容超过一行的部分,用省略号代替】【支持IE6】
- RecyclerView 滑动检测 (上滑 up)(下滑 down)(顶部 top)(底部 bottom)e
- 【自动化测试工具】QTP/UFT入门--雷锋
- 0-1背包问题 python
- Qt学习16——程序启动画面QSplashScreen
- nvram
- Struts2_接收请求参数
- 终于下手,Ubuntu 17.10 用 GDM 取代 LightDM
- 遭遇i386导致的程序不能运行
- 升级openwrt的cmake版本