背景:页面Activity内子布局是ViewPager,ViewPager内是Fragment,Fragment内是RecyclerView,RecyclerView内是一个需要捕获滑动事件的布局(可能是RecyclerView,ViewPager,ScrollView,自定义View等)。本次实例为自定义View,其他view同理。

问题:当滑动最内层的“自定义View”时,外层RecyclerView和ViewPager都会捕获滑动时间,导致当前自定义View只能接收到一次滑动事件后就不再响应。

问题现象:Item的图片区域无法消费滑动事件,与外层的RecyclerView或ViewPager冲突。

理想结果:只有Item的图片区域可以消费滑动事件。

解决代码:

1、处理RecyclerView// 设置条目的触摸事件监听,处理擦一擦类型广告和外层RecyclerView或ViewPager的滑动冲突recyclerView.addOnItemTouchListener(new OnItemTouchListener() {@Overridepublic boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {//处理RecyclerView的item中嵌套可消费滑动事件的view时的滑动冲突问题View childViewUnder = recyclerView.findChildViewUnder(e.getX(), e.getY());if (rv != null && childViewUnder != null){WipeFragmentListAdapter.ViewHolder baseViewHolder = (WipeFragmentListAdapter.ViewHolder)rv.getChildViewHolder(childViewUnder);recyclerView.requestDisallowInterceptTouchEvent(baseViewHolder.isTouchInWipeSpace(e.getRawX(),e.getRawY()));}return false;}@Overridepublic void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {}@Overridepublic void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {}});
2、判断可滑动区域,mWipeView则为示例中Item的图片部分。/*** @param x event的rowX* @param y event的rowY* @return 这个点在不在内部targetView范围内.*/public boolean isTouchInWipeSpace(float x, float y) {int[] wh = new int[2];//触摸在屏幕上的位置mWipeView.getLocationOnScreen(wh);int width = mWipeView.getMeasuredWidth();int height = mWipeView.getMeasuredHeight();return x >= wh[0] && x <= wh[0] + width && y >= wh[1] && y <= wh[1] + height;}

Done!

解决RecyclerView内子条目可滑动导致的滑动冲突相关推荐

  1. Android RecycleView切换条目布局visibility导致列表滑动

    在项目开发过程遇到一个问题,切换布局中某个子view的visibility为gone后,RecyclerView 自己莫名其妙的滚动了一点.通过网上查找发现,这是RecyclerView 抢占焦点导致 ...

  2. 【Android 手势冲突】Colin带你彻底解决RecyclerView与ScrollView滑动冲突问题,并实现RecyclerView悬停导航栏(附demo哦)

    在新一期的需求中,产品要求我们做出和美团某个页面类似的功能,即一个页面包含在scrollView中,上面一个部分放置一些常用的广告banner.宫格tab等,下面放置一个RecyclerView用于展 ...

  3. Android 解决RecyclerView删除Item导致位置错乱的问题

    Android 解决RecyclerView删除Item导致位置错乱的问题 参考文章: (1)Android 解决RecyclerView删除Item导致位置错乱的问题 (2)https://www. ...

  4. 180508 - 解决有关VIVO的2018-04-01安全补丁导致的APP闪退问题

    解决有关VIVO的2018-04-01安全补丁导致的APP闪退问题 [√]问题原因猜测4: 最终解决方案 [√]问题原因猜测3: 尝试解决 [√成功] [×]问题原因猜测2: 尝试解决 [×失败] [ ...

  5. RecyclerView添加头条目显示空白的解决方案

    如果RecyclerView的头条目是建立在一个集合的基础上,通过添加到集合中然后刷新RecyclerView来添加头条目,若使用了**集合.addView(索引,view)**这样的方法可能会造成某 ...

  6. 使用vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题

    使用vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题 当你的SPA(单页应用程序)变得复杂时,打包构建后的Javascript包会变得非常大,以至于严重影响页面的加载时间.vue-r ...

  7. RecyclerView滚动指定条目并在页面中居中

    RecyclerView滚动指定条目并在页面中居中 内容提要 本次的需求是通过指定position来控制条目滚动,并且要滚动到指定到中间的位置. 下面先上图,看看是不是你要 如下介绍主要的步骤 带着问 ...

  8. STM32片内FLASH烧写错误导致ST-LINK烧录不进程序的问题解决过程

    STM32片内FLASH烧写错误导致ST-LINK烧不进程序的问题解决过程 项目及配置描述 这个问题是在做bootloader OTA测试时出现的,其中bootloader由http://iot.rt ...

  9. Android 解决RecyclerView瀑布流刷新之后Item位置改变

    解决RecyclerView瀑布流刷新之后Item位置改变 为了测试RecyclerView瀑布流效果,每个Item的高度采取了随机高度,导致每次刷新的时候,重新随机出来的高度和原来的不一致,会导致I ...

  10. goroutine中使用recover,解决协程中出现panic,导致程序崩溃的问题。recover panic 协程的错误处理

    package mainimport ("fmt""time" )//goroutine中使用recover,解决协程中出现panic,导致程序崩溃的问题. f ...

最新文章

  1. 单端信号和差分信号的区别
  2. log_softmax
  3. 关于JS数组API的总结
  4. 人生最浪费生命的四件事,2017年别再做了!
  5. Spring - Java/J2EE Application Framework 应用框架 第 14 章 JMS支持
  6. 【ios】Storyboard教程
  7. 浮点数赋值给整数_初学者专题:变量和赋值
  8. React实现图片自适应
  9. [html] 怎样使用iframe刷新父级页面
  10. 【kafka】kafka 如何开启 kafka.consumer的监控指标项
  11. Codeforce C. Bus
  12. Vmware Fusion
  13. Matplotlib 应用
  14. 什么是开环控制,闭环控制?它们的根本区别是什么
  15. go 家庭收支记账软件
  16. android手机没电怎么恢复电量,Android手机电池电量剩下通知
  17. 数据库连接和数据库连接池连接
  18. 光模块(光口)和电模块(电口)
  19. UCK Network 为开发者提供全方位孵化,打造区块链爆款应用
  20. Arduino智能小车——循迹篇

热门文章

  1. 1395786-30-7,DBCO Maleimide,DBCO-Mal
  2. 点菜系统(适合Java基础练习)
  3. Will you pity a beggar ? What do you think of them ?
  4. html超链接字体颜色怎么改DW,如何利用Dreamweaver设计彩色文字链接
  5. 华硕无线路由打印机服务器,彻底了解WL-500g型的华硕无线网络路由器
  6. thx是什么意思_thx是什么意思?
  7. Project *** is already imported into workspace 处理
  8. 手机浏览器onclick事件不能跳转页面
  9. Python100例——第五章----不定方程的解
  10. 4月6日----4月10日二年级课程表