首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 )

mRecyclerView.addItemDecoration(this); // 添加了每个条目上触摸监听器 mOnItemTouchListener // 该监听器是定义...mOnItemTouchListener , 这是 RecyclerView ItemTouchHelper 核心 ; OnItemTouchListener 是 RecyclerView 定义作用与条目组件触摸监听器...按下 , 移动 , 抬起 事件 ; OnItemTouchListener 触摸监听器 , onInterceptTouchEvent 方法处理是事件拦截机制 , onTouchEvent 方法是最终消费事件方法..., 只负责拦截手指按下 和 抬起 操作 , ItemTouchHelper 业务逻辑 , 不需要处理移动事件 ; 2、处理按下事件 当检测到 MotionEvent.ACTION_DOWN 按下操作...一个条目 ; // 找到手指按下所在位置条目的 View 组件 // 查找手指按下 View 子组件 , 该子组件 RecyclerView 一个条目

1.8K20

Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )

监听器 onInterceptTouchEvent 触摸事件拦截方法 , 本篇博客主要分析另外一个 触摸事件消费方法 onTouchEvent ; onTouchEvent 事件消费 ,..., 执行响应方法 ; 如果拖动比例没有超过该值 , 说明没有触发拖动操作 , 直接返回 ; // 该判断 , 使用了 threshold 系数 乘以 水平 / 垂直 方向上条目组件宽度...RecyclerView 一个条目 // 用户按下 RecyclerView 某个条目 // findAnimation 方法用于找到按下条目...View 组件 // 查找手指按下 View 子组件 , 该子组件 RecyclerView 一个条目 View target = findChildView...// 如果 mSelected 成员不为 , 则直接使用 , 分支中直接返回了 if (mSelected !

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

智能下拉刷新框架-SmartRefreshLayout

独立事件 Header和Footer 可以独立处理手指滑动事件来动画提供操作指令,也可以使用RefreshLayout核心接口来完成一些不寻常操作指令。...下面的打砖块 Header ,Header可以独立使用滑动事件来游戏挡板提供指令,并同时可以调用核心接口来通知RefreshLayout上下滚动列表 ? 智能 智能是什么玩意?有什么用?...> Android Studio 预览效果图 和 运行效果图 ?...我们注意看右边图,仔细观察手指触摸位置和下拉效果。可以看到列表已经滚动到中部,轻微下拉列表是不会触发刷新,但是如果是触摸固定布局,则可以触发下拉。...:1.0.1'//如果使用了特殊Header 2.XML布局文件添加 SmartRefreshLayout <?

3.5K50

Android 事件分发】ItemTouchHelper 事件分发源码分析 ( 绑定 RecyclerView )

, 设置当前 mRecyclerView 成员绑定 RecyclerView 列表 , 并调用 setupCallbacks 方法 , ItemTouchHelper 设置回调 ; setupCallbacks... , 调用 RecyclerView.addOnItemTouchListener 方法 , RecyclerView 设置了触摸监听器 , 该触摸监听器是定义 ItemTouchHelper...成员变量 private final OnItemTouchListener mOnItemTouchListener ; // 添加了每个条目上触摸监听器 mOnItemTouchListener...// 该监听器是定义 ItemTouchHelper 成员变量 mRecyclerView.addOnItemTouchListener(mOnItemTouchListener...mRecyclerView.addItemDecoration(this); // 添加了每个条目上触摸监听器 mOnItemTouchListener // 该监听器是定义

37320

Android开发笔记(一百二十二)循环器视图RecyclerView

RecyclerView相关工程sdk路径sdk\extras\android\support\v7\recyclerview,不过幸好用它不像用Toolbar那样麻烦,要想使用Toolbar得先导入并引用...setItemAnimator : 设置列表项增删动画。 addOnItemTouchListener : 添加列表项触摸监听器。...因为RecyclerView没有实现列表项点击接口,所以开发者可通过这里触摸监听器来监控用户手势。 removeOnItemTouchListener : 移除列表项触摸监听器。...onCreateViewHolder : 创建整个布局视图持有者。输入参数包括视图类型,可根据视图类型加载不同布局,从而实现带头部列表布局。...方法,界面就会根据新布局刷新列表项,这个特性特别适合于手机竖屏/横屏之间显示切换(如竖屏展示ListView,横屏展示GridView),也适合在不同屏幕分辨率如手机/平板之间显示切换(如手机上展示

2.4K20

Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 七 )

; ViewGroup | dispatchTransformedTouchEvent 方法 , 传入子组件 , 表示事件被拦截了 , 或消费不成功 , 此时需要消费自己触摸事件 , 调用父类...* 该方法是正式分发触摸事件方法 * 注意参数传入了当前正在被遍历 child 子组件 * 如果事件被拦截 , 或者没有被消费掉 , 则不会对 mFirstTouchTarget...mOnTouchListener 成员 ; 这是用户设置 触摸监听器 , 是开发设置组件触摸事件 , 返回 true / false ; 如果返回 true 则成功消费事件 , 事件分发到此结束...* 该方法是正式分发触摸事件方法 * 注意参数传入了当前正在被遍历 child 子组件 * 如果事件被拦截 , 或者没有被消费掉 , 则不会对 mFirstTouchTarget...= true; } // 如果上面 true ( 触摸监听器触摸事件处理返回 true ) , 就会阻断该分支命中 , 该分支不执行了 // 也就不会调用

1.2K20

Android Studio 3.6使用视图绑定替代 findViewById方法

一个常见错误用法是: 开启了视图绑定同时,依然 setContentView(…) 传入布局 id 而不是绑定对象。这将造成同一布局被填充两次,同时监听器也会被添加到错误布局对象。...如果您正在使用 Kotlin,视图绑定生成类也已经对互操作进行了优化。通过 @Nullable 和 @NonNull 注解使用,Kolin 可以正确将属性暴露安全类型。... ActivityAwesomeBinding.java ,视图绑定生成了一个只有一个参数 inflate 方法,该方法通过将 parent 设定为值来指定当前视图不会绑定到父视图中;视图绑定也暴露了一个有三个参数...bind(rootView) — 您已经获得对应视图,并且只想通过视图绑定来避免使用 findViewById 使用。这个方法使用视图绑定改造和重构现有代码非常有用。...两者都被开启使用 <layout 标签布局会由数据绑定来生成绑定对象;而其余布局则由视图绑定生成绑定对象。 您可以同一 Module 同时使用数据绑定和视图绑定。

2.4K31

Android 事件处理探险

Android提供了两套事件处理机制:基于监听事件处理;基于回调事件处理 1.基于监听事件处理 Android事件处理是一种委派式事件处理方式(事件源将整个事件处理委托给事件监听器),事件监听处理模型主要涉及...注意:不推荐将业务逻辑实现写在事件监听器,包含业务逻辑事件监听器将导致程序显示逻辑与业务逻辑耦合,增加了后期维护难度。...boolean onTouchEvent(MotionEvent event) // 触摸屏事件 基于回调事件处理机制可通过自定义View来实现,自定义View重写该View事件处理方法即可...what属性指定值且object属性指定对象消息 boolean sendEmptyMessage(int what):发送消息 boolean sendEmptyMessageDelayed(...:提高兼容性(如果某个泛型参数不需要指定类型,可将其指定为void) 参数1:子线程执行所需参数参数2:显示当前加载进度;参数3:子线程执行结果; 接下来开始调用系统异步加载框架,用法如下: new

64370

Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 六 )

、按下触摸事件记录 ---- 在上一篇博客 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 五 ) , 着重分析了 ViewGroup 事件分发 , 触摸事件没有被消费..., 直接执行该分支后面的代码 ; 这里第 1 次按下 , 创建触摸事件记录 TouchTarget ; 假如当前动作按下以后移动/抬起动作 , 则跳过上面的分支 , 直接执行后面的代码逻辑...TouchTarget 对象了 ; 直接使用第一次按下 TouchTarget 对象作为当前动作标识 , 直接向该 TouchTarget 对象 View 组件分发事件 ; 这也是我们按下按钮...* 该方法是正式分发触摸事件方法 * 注意参数传入了当前正在被遍历 child 子组件 */ private boolean dispatchTransformedTouchEvent...= true; } // 如果上面 true ( 触摸监听器触摸事件处理返回 true ) , 就会阻断该分支命中 , 该分支不执行了 // 也就不会调用

1.2K20

使用视图绑定替代 findViewById

一个常见错误用法是: 开启了视图绑定同时,依然 setContentView(...) 传入布局 id 而不是绑定对象。...这将造成同一布局被填充两次,同时监听器也会被添加到错误布局对象。... ActivityAwesomeBinding.java ,视图绑定生成了一个只有一个参数 inflate 方法,该方法通过将 parent 设定为值来指定当前视图不会绑定到父视图中;视图绑定也暴露了一个有三个参数...bind(rootView) -- 您已经获得对应视图,并且只想通过视图绑定来避免使用 findViewById 使用。这个方法使用视图绑定改造和重构现有代码非常有用。...两者都被开启使用 标签布局会由数据绑定来生成绑定对象;而其余布局则由视图绑定生成绑定对象。 您可以同一 Module 同时使用数据绑定和视图绑定。

1.6K30

当你刷新RecyclerView程序崩掉时候

图片截自StackOverFlow 通过蹩脚翻译,得到如下信息: 这个错误原因是xml布局文件中将android:animateLayoutChanges 设置true 并且java...我们知道android:animateLayoutChanges="true"是列表增删Item时候调用系统自带动画效果,而RecyclerView机制是对子视图复用,不会在真正意义上对Item...图片截自StackOverFlow 从回答,我们可以看到,多个Item包含EditText时候,因为其中一个EditText抢占了RecyclerView焦点,导致无法被回收,所以报错。...其解决方法RecyclerView添加focusableInTouchMode属性,使之在触摸模式下(手指接触屏幕)依然可以获取到焦点,从而对Item进行回收刷新。...其解决方法是:将列表清空方法放到获取到接口数据以后执行。 以上就是本文所有内容,对于上述解决方法理解存在“主观臆断”倾向,因此本文仅供参考,若有错误地方,欢迎大家文章下方评论指正!

2.2K20

Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 五 )

方法进行事件转发 , 主要是遍历子组件调用子组件触摸方法 ; ViewGroup | dispatchTransformedTouchEvent 方法 , 调用了 View 子组件 View...方法 , 如果 child , 则会调用父类 super.dispatchTouchEvent 方法 ; ViewGroup 继承自 View , ViewGroup 调用 super.dispatchTouchEvent...* 该方法是正式分发触摸事件方法 * 注意参数传入了当前正在被遍历 child 子组件 */ private boolean dispatchTransformedTouchEvent...触摸监听器 就是封装在该对象 ListenerInfo li = mListenerInfo; // 判断该组件是否被用户设置了 触摸监听器 OnTouchListener...= true; } // 如果上面 true ( 触摸监听器触摸事件处理返回 true ) , 就会阻断该分支命中 , 该分支不执行了 // 也就不会调用

1.5K30

RecyclerView必知必会

基本概念 RecyclerViewAndroid 5.0提出新UI控件,位于support-v7包,可以通过build.gradle添加compile 'com.android.support...ListView提供了setEmptyView()设置Adapter数据View视图。...具体实现如下: 然后通过以下代码RecyclerView设置该滑动、拖拽功能: 前面拖拽触发方式只有长按,如果想支持触摸Item某个View实现拖拽,则核心方法helper.startDrag...是创建Adapter将实现OnStartDragListener接口Activity对象作为参数传进来。...嵌套滑动机制 Android 5.0推出了嵌套滑动机制,之前,一旦子View处理了触摸事件,父View就没有机会再处理这次触摸事件,而嵌套滑动机制解决了这个问题,能够实现如下效果: 为了支持嵌套滑动

4.6K20

RecyclerView 必知必会

基本概念 RecyclerViewAndroid 5.0提出新UI控件,位于support-v7包,可以通过build.gradle添加compile 'com.android.support...添加setEmptyView ListView提供了setEmptyView()设置Adapter数据View视图。RecyclerView虽然没提供直接API,但是也可以很简单地实现。...通过getRootView().addView(emptyView)将数据显示View添加到当前View层次结构。...其中mListener是创建Adapter将实现OnStartDragListener接口Activity对象作为参数传进来。...嵌套滑动机制 Android 5.0推出了嵌套滑动机制,之前,一旦子View处理了触摸事件,父View就没有机会再处理这次触摸事件,而嵌套滑动机制解决了这个问题,能够实现如下效果: ?

2.5K70

RecyclerView 必知必会

基本概念 RecyclerViewAndroid 5.0提出新UI控件,位于support-v7包,可以通过build.gradle添加compile 'com.android.support...添加setEmptyView ListView提供了setEmptyView()设置Adapter数据View视图。RecyclerView虽然没提供直接API,但是也可以很简单地实现。...通过getRootView().addView(emptyView)将数据显示View添加到当前View层次结构。...其中mListener是创建Adapter将实现OnStartDragListener接口Activity对象作为参数传进来。...嵌套滑动机制 Android 5.0推出了嵌套滑动机制,之前,一旦子View处理了触摸事件,父View就没有机会再处理这次触摸事件,而嵌套滑动机制解决了这个问题,能够实现如下效果: ?

4.1K90

Android应用开发】RecycleView API 翻译 (文档翻译)

Position(位置): 适配器(Adapter)数据项目位置. Index(索引): 一个已经附加子组件索引getChildAt(int)方法中使用. 与Position形成对比....之间,用于布局计算成批量地观察数据集变化...., 当你需要去使用最新适配器位置, 你应在使用这些方法, 即使这些位置还没有针对对布局进行更新....RecycleView 中被附加或者移除时候该监听器就会被通知. interface RecyclerView.OnItemTouchListener 项目触摸监听器作用 : RecycleView...层级触摸事件被当做 RecycleView 自己滚动操作, 设置了该监听器, 就可以 RecycleView 将触摸事件当做滚动事件之前拦截这些触摸操作. class RecyclerView.OnScrollListener

1.3K40

错误记录】Android Studio 编译 Kotlin 代码编译报错 ( 升级支持库处理 @NonNull 参数 )

{ super.getItemOffsets(outRect, view, parent, state) } 注意重写方法 , 参数类型 outRect...都是可类型 ; 查看 ItemDecoration 真实代码 , 其中 getItemOffsets 方法四个参数都是非类型 , 添加了 @NonNull 注解 , 因此这里必须传入参数 ,...继承继承参数 , 肯定报错 , 参数类型不一致 ; public void getItemOffsets(@NonNull Rect outRect, @NonNull View...)view.getLayoutParams()).getViewLayoutPosition(), parent); } } 三、解决方案 Google 之前支持库方法参数..., 没有添加 @NonNull 注解 , 28.0.0 版本 , 添加了该注解 , 导致了继承不兼容情况 ; 修改方法是将所有的参数类型都设置类型 , 删除每个参数问号即可 ;

2.1K20

RecyclerView 梳理:点击&长按事件、分割线、拖曳排序、滑动删除

自从 RecyclerView 发布以来,由于其高度可交互性被广泛使用。相信大家肯定对它使用方法已经非常熟练了,今天主要是大家总结一下较正常用法更加优雅方式。...如果你想再回顾一下 RecyclerView 基本使用方法,推荐鸿洋这篇文章: Android RecyclerView 使用完全解析 体验艺术般控件 优雅实现:item 点击事件 & item...当然你还可以通过给 item 最外层布局设置一个 margin 值,甚至你还可以专门 item 布局适当地方添加一个高度/宽度 1 带背景 View 作为 divider,这两种方法呢,确实有效果...该方法参数 RecyclerView.ItemDecoration,该类抽象类,且官方目前并没有提供默认实现类,我们只能自己来实现。...需要我们关注是创建 ItemTouchHelper 传入参数 ItemTouchHelper.Callback() 。

2.9K30

一篇博客理解Recyclerview使用

,然而在日常开发,响应点击事件无疑都是必须,虽然它没有提供,但是我们可以手动添加OnItemClickListener,我们可以Adapter添加这个回调接口: 例子2:可以点击RecyclerView...实现滚动内容联动 例子3:RecyclerView制作相册效果 效果:原工程基础上进行修改,改成相册效果,即上面显示一张大图,下面的RecyclerView做为图片切换指示器。...,然后onTouchEvent,监听ACTION_MOVE,用户手指滑动,不断把当前第一个View回调回去 关于为什么getChildAt(0)和getChildPosition()可用,起初我以为有...效果如下: 5.RecyclerView实现瀑布流 例子4:用RecyclerView打造瀑布流效果 其中大部分内容实现和基本RecyclerView使用是一样,就不多叙述了,就一个地方不同...,就是我们适配器绑定ViewHolder方法需要重新给我们itemView布局设置height,这里是生成随机数来设置高度

61730

《移动互联网技术》第五章 界面开发: 掌握Activity基本概念,Activity堆栈管理和生命周期

资源路径drawable下面添加一个文字选择器xml文件,selector标签,加入两个item标签,当选中状态“真”,设置文本选中颜色(设置粉色),当选中状态“假”,设置正常状态颜色...基于回调事件处理模型,事件源和事件监听器是统一,因此看不到事件监听器。当用户控件上触发某个事件(监听事件),控件(事件源)自身特定函数将会负责处理该事件。...采用回调方式就是把事件监听器放置事件源上,比如在上面的例子,按钮类就实现了对触摸事件处理。用户触发事件所产生信息由事件(event对象)表示,它包含事件编码和事件本身携带信息。...从Intent取出数据,需要根据数据类型调用相应get函数,比如使用getStringExtra()函数来获取字符串类型数据,函数参数是对应数据键值。...双缓冲技术是当程序指定视图上绘制图形,程序并不直接绘制该视图控件组件上,而是先绘制到一个内存Bitmap图像上,这就是绘图缓冲;然后,等到内存Bitmap绘制完以后,再一次性地将Bitmap

9510
领券