我们以RecyclerView为例,看下为什么引发了这种“在DOWN的时候就决定了targetView是item,后面的事件move是怎么给recyclerView的”

  • MOTION_DOWN

    • 父控件recyclerView的dispatchTouchEvent开始,InterceptTouchEvent返回的是false,也就是不拦截。那么流程正常进行,一直dispatch到了itemView,接着itemView响应了MOVE_DOWN的事件,传递链的targetView被设置成了itemView
  • 第一个MOTION_MOVE:

    • 同样是从父控件的recyclerView的dispatchTouchEvent,但是发现这是个MOVE事件检测后InterceptTouchEvent返回的是true
    • 调用dispatchTransformedTouchEvent(ev, cancelChild, target.child, target.pointerIdBits),传给原本的target一个MOTION_CANCEL事件让target将这个CANCEL事件传递下去,这个事件会使得child一下的view的触摸事件全部被取消掉
    • 接着dispatchTouchEvent返回true,层层传递给父亲。
    • 注意这次的MOTION_MOVE事件并没有使得recyclerView滚动,但是recyclerView的mTargetView被置为了null,也就是传递链的targetView被置为了recyclerView。
  • MOTION_MOVE

    • 这一次recyclerView真正成为了传递链的targetView,这时候传递到recyclerView的时候,recyclerView就会传递给自己的onTouchEvent,这样就可以正常地执行这个滚动操作了

也就是说,在滑动的时候,RecyclerView通过onInterceptTouchEvent返回true,来实现最开始的拦截。传递给儿子的是CANCEL事件,同时让自己变成了传递链的末尾,并且消耗了一个motion_move事件,第二个motion_move的时候才会真正开始执行该move的滑动。

那么现在问题就转化为:在 Multi-Like场景中,我们如何让RecyclerView等容器的onInterceptTouchEvent不来拦截我们的move事件?

如果比较清楚Android的事件转发流程,我们自然会想到一个方法requestDisallInterceptRouchEvent(boolean disallowIntercept),: ** 通过在子类中调用getParent().requestDisallInterceptRouchEvent(true) 来让父布局禁用拦截事件功能,从而父布局忽略该事件之后的一切Action **

该将父布局的disallowIntercept 设置为true,所以当本次touch事件之后的action再次进入到父布局disPatchTouchEvent的时候,条件语句if(disallowIntercept || !onInterceptTouchEvent(ev)) 始终为true,并且将忽略到后面!onInterceptTouchEvent(ev) 的判断,导致之后的一切action都将被分发到子View中,除非在之后子View的onTouchEvent中将该disallowIntercept重新设置为false

// 【二、检查是否需要拦截】.final boolean intercepted;if (actionMasked == MotionEvent.ACTION_DOWN || mFirstTouchTarget != null) {final boolean disallowIntercept = (mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0;if (!disallowIntercept) {intercepted = onInterceptTouchEvent(ev);  // 询问是否拦截ev.setAction(action);                      // 恢复操作,防止被更改} else {intercepted = false;}} else {// 没有目标来处理该事件,而且也不是一个新的事件事件(ACTION_DOWN), 进行拦截。intercepted = true;}

(4.0.22.9)RecyclerView中的itemView的Move事件被Cancle相关推荐

  1. 侦听127.0.01_Spring 4.2中由注释驱动的事件侦听器

    侦听127.0.01 介绍 在应用程序内交换事件已成为许多应用程序中必不可少的部分,幸运的是,Spring为瞬态事件(*)提供了完整的基础结构. 最近对事务绑定事件的重构为我提供了一个借口,以在实践中 ...

  2. 微信android系统升级,安卓微信7.0.22正式版更新:新增微信豆等八大更新!

    安卓微信7.0.22正式版更新:新增微信豆等八大更新! 2020-12-26 14:46:57 5点赞 1收藏 2评论 创作立场声明:本文由我原创,转载请标注来源. "十二月了,应该到了今年 ...

  3. RecyclerView中获取item在屏幕中的绝对坐标

    本文为原创作品,转载请标明出处:https://blog.csdn.net/wjj1996825/article/details/80433143 需求分析:在项目中有时候我们用RecyclerVie ...

  4. OSPF 协议中的一个普通区域通过ASBR 注入192.168.0.0/24~192.168.3.0/24 共4 条路由,在ABR 中配置聚合为一条聚合路由192.168.0.0/22,此时ABR 会

    OSPF 协议中的一个普通区域通过ASBR 注入192.168.0.0/24~192.168.3.0/24 共4 条路由,在ABR 中配置聚合为一条聚合路由192.168.0.0/22,此时ABR 会 ...

  5. Android踩坑日记:RecyclerView中EditText和ImageView的ViewHolder复用坑

    RecyclerView中EditText和ImageView的ViewHolder复用坑 RecyclerView作为ListView的升级版,目前来讲讲开发过程遇到的坑. RecyclerView ...

  6. c# 实现刷卡_如何在RecyclerView中实现“刷卡选项”

    c# 实现刷卡 Let's say a user of your site wants to edit a list item without opening the item and looking ...

  7. 什么?RecyclerView中获取点击位置的接口被废弃了?

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新. 各位小伙伴们,大家早上好.上个礼拜,我在公众号的某篇文章下面看到这样一条留言: 什么?hol ...

  8. SearchView结合Toolbar 筛选RecyclerView中的内容,类似知乎、google play实现的效果

    SearchView结合Toolbar 筛选RecyclerView中的内容,类似知乎.google play实现的效果 标签: SearchViewToolBarRecyclerFilter知乎 2 ...

  9. android holder 内部类,Android RecyclerView中的ViewHolder

    在使用android提供的组件以列表的格式显示数据时,使用过ListView组件和RecyclerView组件.目前一般推荐使用RecyclerView,因为RecyclerView本身的缓存和效率比 ...

最新文章

  1. Windows 10 Visual Studio 2017 安装配置 Apache Thrift (C++)
  2. 大象狂奔,地表最强大的投行高盛摩根转型
  3. 【黑马程序员 C++教程从0到1入门编程】【笔记3】C++核心编程(内存分区模型、引用、函数提高)
  4. 设置打包方式为war
  5. 未来数据中心的五大“走心”创新
  6. Linux shell 脚本SDK 打包实践, 收集assets和apk, 上传FTP
  7. 临床外显子组测序分析中的那些坑(中)
  8. UI历练素材|成功,少不了的临摹进阶
  9. Linux指纹识别程序,linux上应用指纹识别(转载)
  10. 今日讨论:你们测试组有公共用例库吗?
  11. SysUtils.AdjustLineBreaks - Unix 与 Windows 的换行符互换
  12. 机器学习实现计算不规则图形面积_【名师课堂】苏教数学五年级上2.11校园绿地面积...
  13. 网络速度在线测试软件,在线网速测试(局域网速度测试工具)
  14. 《FLUENT 14流场分析自学手册》——1.3 附面层理论
  15. 解决XeLaTex编译后中文出现乱码的问题
  16. springboot上传图片
  17. 【java】方法练习1-商品总价对应折扣
  18. 星际争霸1终于可以在win10上运行了
  19. JAVA程序之选举班长
  20. Android 直播 播放器 IJK播放器低延时120ms

热门文章

  1. 苹果新款笔记本_苹果发布新款 13 寸 MacBook Pro 笔记本
  2. ASEMI整流桥KBL406参数,KBL406规格,KBL406封装
  3. 百度的司机,今天干了件轰动中外的大事
  4. ZzzFun动漫看番必备App,资源丰富更新快,再见B站大会员
  5. 第一个Java程序:HelloWorld!
  6. 开发者一定要了解的六款大数据采集平台
  7. 京东金融加班新规,员工愤怒了:这是逼着我们辞职吗?
  8. php把buffer转化为图片_图片buffer转base64
  9. Grammarly安装
  10. KLT稀疏光流法跟踪特征点详解