解决RecyclerView内子条目可滑动导致的滑动冲突
背景:页面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内子条目可滑动导致的滑动冲突相关推荐
- Android RecycleView切换条目布局visibility导致列表滑动
在项目开发过程遇到一个问题,切换布局中某个子view的visibility为gone后,RecyclerView 自己莫名其妙的滚动了一点.通过网上查找发现,这是RecyclerView 抢占焦点导致 ...
- 【Android 手势冲突】Colin带你彻底解决RecyclerView与ScrollView滑动冲突问题,并实现RecyclerView悬停导航栏(附demo哦)
在新一期的需求中,产品要求我们做出和美团某个页面类似的功能,即一个页面包含在scrollView中,上面一个部分放置一些常用的广告banner.宫格tab等,下面放置一个RecyclerView用于展 ...
- Android 解决RecyclerView删除Item导致位置错乱的问题
Android 解决RecyclerView删除Item导致位置错乱的问题 参考文章: (1)Android 解决RecyclerView删除Item导致位置错乱的问题 (2)https://www. ...
- 180508 - 解决有关VIVO的2018-04-01安全补丁导致的APP闪退问题
解决有关VIVO的2018-04-01安全补丁导致的APP闪退问题 [√]问题原因猜测4: 最终解决方案 [√]问题原因猜测3: 尝试解决 [√成功] [×]问题原因猜测2: 尝试解决 [×失败] [ ...
- RecyclerView添加头条目显示空白的解决方案
如果RecyclerView的头条目是建立在一个集合的基础上,通过添加到集合中然后刷新RecyclerView来添加头条目,若使用了**集合.addView(索引,view)**这样的方法可能会造成某 ...
- 使用vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
使用vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题 当你的SPA(单页应用程序)变得复杂时,打包构建后的Javascript包会变得非常大,以至于严重影响页面的加载时间.vue-r ...
- RecyclerView滚动指定条目并在页面中居中
RecyclerView滚动指定条目并在页面中居中 内容提要 本次的需求是通过指定position来控制条目滚动,并且要滚动到指定到中间的位置. 下面先上图,看看是不是你要 如下介绍主要的步骤 带着问 ...
- STM32片内FLASH烧写错误导致ST-LINK烧录不进程序的问题解决过程
STM32片内FLASH烧写错误导致ST-LINK烧不进程序的问题解决过程 项目及配置描述 这个问题是在做bootloader OTA测试时出现的,其中bootloader由http://iot.rt ...
- Android 解决RecyclerView瀑布流刷新之后Item位置改变
解决RecyclerView瀑布流刷新之后Item位置改变 为了测试RecyclerView瀑布流效果,每个Item的高度采取了随机高度,导致每次刷新的时候,重新随机出来的高度和原来的不一致,会导致I ...
- goroutine中使用recover,解决协程中出现panic,导致程序崩溃的问题。recover panic 协程的错误处理
package mainimport ("fmt""time" )//goroutine中使用recover,解决协程中出现panic,导致程序崩溃的问题. f ...
最新文章
- 单端信号和差分信号的区别
- log_softmax
- 关于JS数组API的总结
- 人生最浪费生命的四件事,2017年别再做了!
- Spring - Java/J2EE Application Framework 应用框架 第 14 章 JMS支持
- 【ios】Storyboard教程
- 浮点数赋值给整数_初学者专题:变量和赋值
- React实现图片自适应
- [html] 怎样使用iframe刷新父级页面
- 【kafka】kafka 如何开启 kafka.consumer的监控指标项
- Codeforce C. Bus
- Vmware Fusion
- Matplotlib 应用
- 什么是开环控制,闭环控制?它们的根本区别是什么
- go 家庭收支记账软件
- android手机没电怎么恢复电量,Android手机电池电量剩下通知
- 数据库连接和数据库连接池连接
- 光模块(光口)和电模块(电口)
- UCK Network 为开发者提供全方位孵化,打造区块链爆款应用
- Arduino智能小车——循迹篇
热门文章
- 1395786-30-7,DBCO Maleimide,DBCO-Mal
- 点菜系统(适合Java基础练习)
- Will you pity a beggar ? What do you think of them ?
- html超链接字体颜色怎么改DW,如何利用Dreamweaver设计彩色文字链接
- 华硕无线路由打印机服务器,彻底了解WL-500g型的华硕无线网络路由器
- thx是什么意思_thx是什么意思?
- Project *** is already imported into workspace 处理
- 手机浏览器onclick事件不能跳转页面
- Python100例——第五章----不定方程的解
- 4月6日----4月10日二年级课程表