DrawerLayout 是 Android 官方的侧滑菜单控件,而 ViewPager 相信大家都很熟悉了。今天这里就讲一下当在 DrawerLayout 中嵌套 ViewPager 时,要如何解决滑动冲突的问题,效果如下:
首先,让我们先来解决 DrawerLayout 和 ViewPager 的侧滑事件冲突。当 DrawerLayout 中嵌套 ViewPager 时,侧滑默认是执行 DrawerLayout 的侧滑事件,因为 Android 的事件分发是从 外层 ViewGroup 向里逐级传递到 View 的。
所以会先执行 DrawerLayout 的 onTouchEvent 方法:
@Overridepublic boolean onTouchEvent(MotionEvent ev) { mLeftDragger.processTouchEvent(ev); mRightDragger.processTouchEvent(ev); final int action = ev.getAction(); boolean wantTouchEvents = true; switch (action & MotionEventCompat.ACTION_MASK) { case MotionEvent.ACTION_DOWN: { final float x = ev.getX(); final float y = ev.getY(); mInitialMotionX = x; mInitialMotionY = y; mDisallowInterceptRequested = false; mChildrenCanceledTouch = false; break; } case MotionEvent.ACTION_UP: { final float x = ev.getX(); final float y = ev.getY(); boolean peekingOnly = true; final View touchedView = mLeftDragger.findTopChildUnder((int) x, (int) y); if (touchedView != null && isContentView(touchedView)) { final float dx = x - mInitialMotionX; final float dy = y - mInitialMotionY; final int slop = mLeftDragger.getTouchSlop(); if (dx * dx + dy * dy < slop * slop) { // Taps close a dimmed open drawer but only if it isn't locked open. final View openDrawer = findOpenDrawer(); if (openDrawer != null) { peekingOnly = getDrawerLockMode(openDrawer) == LOCK_MODE_LOCKED_OPEN; } } } closeDrawers(peekingOnly); mDisallowInterceptRequested = false; break; } case MotionEvent.ACTION_CANCEL: { closeDrawers(true); mDisallowInterceptRequested = false; mChildrenCanceledTouch = false; break; } } return wantTouchEvents;}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- 如何高效地部署 Java 应用程序?(如何部署Java应用程序)
- Java 类的访问控制顺序究竟是怎样的?(java类的访问控制顺序是什么)
- 如何轻松解决 java exe4j 安装问题?(如何解决java exe4j安装问题)
- 如何在 Java 中向 MySQL 数据库添加数据?(java怎么向mysql数据库中添加)
- 如何获取 Java 枚举类的值?(java枚举类的值怎么获取)
- 如何在 Java 中向数据库添加一条数据?(java怎么向数据库添加一条数据)
- 宁夏软考考试科目有哪些?2025年宁夏软考考试科目安排
- Uncomtrade数据库异地备份指南
- CORS 在微服务架构中的应用场景有哪些?(cors在微服务架构中的应用场景)
- 2024下半年陕西软考成绩复查通知
猜你喜欢
AI推送时光机Android App中ViewPager所带来的滑动冲突问题解决方法
后端开发2022-06-06
Android listview的滑动冲突解决方法
后端开发2022-06-06
Android滑动冲突问题的解决方法
后端开发2022-06-06
Android滑动事件冲突的解决方法
后端开发2022-06-06
android中view手势滑动冲突的解决方法
后端开发2022-06-06
浅谈Android View滑动冲突的解决方法
后端开发2022-06-06
ViewPager2滑动冲突的解决方法
后端开发2024-04-02
android多种滑动冲突的解决方案
后端开发2022-06-06
Android滑动冲突的完美解决方案
后端开发2022-06-06
Android滑动冲突的完美解决
后端开发2022-06-06
Android中怎么解决嵌套滑动冲突
后端开发2023-05-30
Android应用中出现滑动冲突如何解决
后端开发2023-05-31
Android应用中的View出现滑动冲突如何解决
后端开发2023-05-31
Android中RecyclerView嵌套滑动冲突解决的代码片段
后端开发2022-06-06
浅谈Android实践之ScrollView中滑动冲突处理解决方案
后端开发2022-06-06
Android应用的中滑动事件出现冲突如何解决
后端开发2023-05-31
Android下拉刷新与轮播图滑动冲突解决方案
后端开发2022-06-06
咦!没有更多了?去看看其它编程学习网 内容吧