Android RecyclerView(九)滑动监听


1 RecyclerView 的滑动监听
1.1 RecyclerView 设置滑动监听

mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {@Overridepublic void onScrollStateChanged(RecyclerView recyclerView, int newState) {super.onScrollStateChanged(recyclerView, newState);}@Overridepublic void onScrolled(RecyclerView recyclerView, int dx, int dy) {super.onScrolled(recyclerView, dx, dy);}
});
1.2 滑动监听回调方法说明
1.3 判断RecyclerView的滑动方向
  • onScrollStateChanged(RecyclerView recyclerView, int newState)这个方法在RecyclerView的滑动状态改变时会调用

对应的参数 newState 有三种状态 ,官方这样描述

    /*** The RecyclerView is not currently scrolling.* @see #getScrollState()*/public static final int SCROLL_STATE_IDLE = 0;/*** The RecyclerView is currently being dragged by outside input such as user touch input.* @see #getScrollState()*/public static final int SCROLL_STATE_DRAGGING = 1;/*** The RecyclerView is currently animating to a final position while not under* outside control.* @see #getScrollState()*/public static final int SCROLL_STATE_SETTLING = 2;

也就是说,newState=0时,RecyclerView在停止状态中
newState=1和newState=2时,RecyclerView在滑动状态中
不同的是,当由0—>1 ,2 时,RecyclerView由静止状态下变为滑动状态,然后1–0 滑动状态变为静止(调用方法 mHomeDateRecyclerView.smoothScrollToPosition(currentPostion); 等这一类方法所触发) , 2–>0 滑动状态变为静止状态(左右滑动RecyclerView 动态的慢慢结束)

  • onScrolled(RecyclerView recyclerView, int dx, int dy ) 这个方法在RecyclerView开始滑动时实时回调

参数dx dy分别是RecyclerView在滑动过程中,在x轴方向(横向滑动)与Y轴方向(纵向滑动)的偏移量
dx>0 向右滑动
dx<0 向左滑动

dy<0 向上滑动
dy>0 向下滑动


2 RecyclerView 的滑动滑动距离获取

可以在RecyclerView的滑动监听中调用此方法,以不断的来获取RecyclerView的滑动距离

//mMTrainLinearLayoutManager 是 Recyclerview对应的布局管理者
if (mMTrainLinearLayoutManager != null) {//获取RecyclerView当前顶部显示的第一个条目对应的索引    int position = mMTrainLinearLayoutManager.findFirstVisibleItemPosition();//根据索引来获取对应的itemView View firstVisiableChildView = mMTrainLinearLayoutManager.findViewByPosition(position);//获取当前显示条目的高度int itemHeight = firstVisiableChildView.getHeight();//获取当前Recyclerview 偏移量int flag = (position) * itemHeight - firstVisiableChildView.getTop();LogUtils.d("scroll " + dx + "  " + dy + " flag " + flag);}

3 获取RecyclerView 当前页面显示的第一个条目或者最后一个条目对应的索引值

//mLinearLayoutManager 是 Recyclerview对应的布局管理者//所有的条目个数
int itemCount1 = mLinearLayoutManager.getItemCount();
//获取当前RecyclerView显示最后一个条目的位置
int mLastVisibleItemPosition = mLinearLayoutManager.findLastVisibleItemPosition();
//获取当前RecyclerView显示的第一个条目的位置
int mFirstVisibleItemPosition = mLinearLayoutManager.findFirstVisibleItemPosition();//获取当前RecyclerView完全显示出的最后一个条目的位置
int mLastCompletelyVisibleItemPosition = mLinearLayoutManager.findLastCompletelyVisibleItemPosition();//获取当前RecyclerView完全显示出的第一个条目的位置
int mFirstCompletelyVisibleItemPosition = mLinearLayoutManager.findFirstCompletelyVisibleItemPosition();

Android RecyclerView(九)滑动监听综述相关推荐

  1. RecyclerView跳转到指定位置,RecyclerView上下滑动监听,RecyclerView滑动速度

    1.RecyclerView跳转到指定位置 只需调用recycleview的置顶方法: recyclerView.scrollToPosition(15); 如果你需要让第15item在屏幕居中,只需 ...

  2. Android中手势滑动监听简单实现

    文章目录 背景 实现 手势监听器的声明和创建 对重写的相关方法 onScroll() 说明 手势监听器接管View的触屏事件 验证结果 背景 项目中要实现控件的滑动监听其实还是挺常见的,这里就简单的做 ...

  3. Android监听左右滑删除通知,Android 滑动监听RecyclerView线性流+左右划删除+上下移动...

    废话不多说了,直接给大家贴代码了.具体代码如下所示: xmlns:tools="http://schemas.android.com/tools" android:layout_w ...

  4. Android——滑动监听SwipeRefreshLayout+瀑布流Recycl+Butter自动生成

    Android--滑动监听SwipeRefreshLayout+瀑布流Recycl+Butter自动生成 package c.example.jreduch09;import android.os.A ...

  5. Android开发之解决NestedScrollView滑动监听兼容低版本的方法

    NestedScrollView的滑动监听目前仅限api23及以上,为了兼容低版本如下自定义方法 可以自定义NestedScrollView即可如下: package cn.net.gfan.worl ...

  6. android触摸滑动监听,Android 滑动监听的实例详解

    Android 滑动监听的实例详解 摘要: ScollBy,ScollTo是对内容的移动,view.ScollyBy是对view的内容的移动 view,ScollTo是对内容的移动(移动到指定位置), ...

  7. android模拟点击滑动,模拟Android的view点击和滑动监听

    一,简单形式的 /*模拟Android中的view 点击和滑动监听 * */ public class View { private OnClickListener onClickListener; ...

  8. 使用swipecard实现卡片视图左右滑动监听以及点击监听

    使用swipecard实现卡片视图左右滑动监听以及点击监听  前言: 大家好,今天给大家介绍安卓一种特别实用有很酷炫的组件swipecard,当然这并不是安卓爸爸创造的,这是国内的一个我认为是大牛的一 ...

  9. Listview的OnScrollListener的滑动监听实现分页加载

    //---------------主布局文件---------------------------- <ListView android:layout_width="fill_pare ...

最新文章

  1. document.all用法(js)
  2. TT 安装 之 AIX
  3. 我和ABP vNext 的故事
  4. jmx 替代_使用JMX作为Ganglia的现代替代品进行CLDB监视
  5. “农业大数据”专题征文通知
  6. Ubuntu 16.04安装MySQL(5.7.18)
  7. HTTP 错误 404.2 – Not Found
  8. C++ 模板实例化与调用
  9. Atitit 作用域的理解attilax总结 1.1. 作用域是指对某一变量和方法具有访问权限的代码空间, 1 1.2. 作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。 1 1
  10. 第1周练习 货币转换 I
  11. unity3D 下雨效果实现
  12. 【matlab】Matlab中产生正态分布随机数的函数normrnd
  13. sqlserver常用语句(报表,递归,分页等)
  14. 爬电、爬距(泄漏距离)、爬电比距
  15. 交通预测论文翻译:Deep Learning on Traffic Prediction: Methods,Analysis and Future Directions
  16. Mybatis:Mybatis分页插件
  17. 航海世纪服务器维护中,航海世纪2月28日例行维护公告
  18. 比Postman还好用的API神器Eolink,效率担当
  19. 数据可视化之Seaborn绘图
  20. AnimatorSet.setDuration问题

热门文章

  1. 今日上新:两个图像领域的现金奖励实时竞赛
  2. 每日整理Python基础——python教程入门学习
  3. 从入门到精通!零基础上手车辆目标跟踪与计数
  4. PyTorch扩展自定义PyThon/C++(CUDA)算子的若干方法总结
  5. NVIDIA开源了基于PyTorch的3D深度学习的综合库
  6. 9600kf功耗和温度评测_i5-9400F与i5-9600KF性能差距大吗?i5 9600KF和9400F区别对比
  7. 揭秘自动驾驶纯视觉算法,探索自动驾驶的未来
  8. 这就是数据分析之数据变换
  9. 11月 北京 | 高性能之GPU CUDA 3天密集式进阶课程
  10. Python中的全局变量与局部变量2