onInterceptTouchEvent和onTouchEvent使用demo



在Android开发中,触摸事件处理是用户界面交互的关键部分。`onInterceptTouchEvent`和`onTouchEvent`是两个至关重要的方法,它们共同构成了Android视图层次结构中的触摸事件分发机制。下面我们将深入探讨这两个方法的用法及其在实际开发中的应用场景。 1. `onInterceptTouchEvent`:此方法用于拦截触摸事件,主要在ViewGroup类中实现。当一个触摸事件发生时,系统会从顶级父View开始,自顶向下遍历整个View树。如果在某个父View中`onInterceptTouchEvent`返回`true`,则表示该父View想要拦截并处理这个事件,后续的触摸事件将不再传递给子View。默认情况下,`onInterceptTouchEvent`返回`false`,表示不拦截事件,事件将继续传递给子View。 2. `onTouchEvent`:此方法在View或ViewGroup中被调用,用于处理接收到的触摸事件。当一个触摸事件发生时,首先会在第一个接触到的View上触发`onTouchEvent`。如果事件未被消耗(即`MotionEvent.ACTION_DOWN`事件的`return true`,或者后续事件的`return false`),则事件会按照事件流向上级View传递。对于ViewGroup而言,只有在其`onInterceptTouchEvent`返回`true`的情况下,才会调用`onTouchEvent`来处理事件。 3. 触摸事件序列:触摸事件通常包含一系列的动作,如`ACTION_DOWN`、`ACTION_MOVE`、`ACTION_UP`等。`ACTION_DOWN`是事件的开始,后续的`ACTION_MOVE`表示手指在屏幕上移动,`ACTION_UP`表示手指抬起,结束事件。在处理这些事件时,开发者需要根据业务需求判断何时消耗事件,何时允许事件继续传递。 4. 示例代码:在`TounchDemo`项目中,通常会包含一个自定义的ViewGroup,比如`MyLayout`,以及一个或多个子View。在`MyLayout`中重写`onInterceptTouchEvent`,根据业务逻辑决定是否拦截事件;同时,子View中也需要重写`onTouchEvent`来处理实际的触摸操作。例如: ```java public class MyLayout extends ViewGroup { @Override public boolean onInterceptTouchEvent(MotionEvent ev) { // 根据条件决定是否拦截事件 if (shouldIntercept()) { return true; } return super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { // 处理拦截到的触摸事件 handleTouchEvent(event); return true; // 消耗事件,防止事件继续向上层View传递 } } public class MyChildView extends View { @Override public boolean onTouchEvent(MotionEvent event) { // 处理子View的触摸事件 handleChildTouchEvent(event); return true; // 消耗事件,防止事件继续向上层View传递 } } ``` 5. 应用场景:`onInterceptTouchEvent`常用于实现滑动切换页面、侧滑菜单、自定义滚动效果等。而`onTouchEvent`则用于处理具体View上的点击、拖拽等交互。通过灵活运用这两个方法,开发者可以创建各种复杂的触摸交互。 6. 注意事项:在处理触摸事件时,要避免过度消耗事件,否则可能导致其他View无法正确响应触摸。同时,理解事件分发流程至关重要,以确保事件能在合适的时机被正确处理。 `onInterceptTouchEvent`和`onTouchEvent`是Android触摸事件处理的核心,它们协同工作,为开发者提供了强大的交互设计能力。通过深入理解并熟练应用这两个方法,开发者能够构建出更加丰富和流畅的用户界面。






































































































- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- liuweixuan2013-07-23是invalid,不能解压
- kfcve1232013-07-05实际使用还是不太会,在详细点就好了
- 竹简自有2014-12-10不是很明白,有点乱。

- 粉丝: 189
- 资源: 6
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 计算机二级习题-计算机二级资源
- (源码)基于Jhipster和WSO2IS的身份认证系统.zip
- MATLAB实现含风电电力系统低碳调度:应对源荷不确定性的优化模型与算法
- **acm协会算法模板-ACM资源
- lanqiaobei-蓝桥杯资源
- 西门子1200/1500 PLC程序集:真实项目案例解析与最佳实践
- (源码)基于Pure Data的Scheme脚本执行系统.zip
- daily-interview-计算机求职面经资源
- daily-interview-计算机求职笔试资源
- 电力系统主从博弈模型的电热综合能源系统动态定价与能量管理实现
- (源码)基于C++的PNG图像转位图工具.zip
- 简书-毕业论文撰写与答辩分享资源
- 基于MATLAB/Simulink的PMSM高频注入法无速度传感器矢量控制仿真研究
- MCS8051内核的MCU单片机例程-电子硬件毕业设计资源
- (源码)基于Java的网络聊天室.zip
- Code-Project-计算机毕业设计资源


