安卓触摸事件探究
2016-03-18 15:39
281 查看
参考,/article/3630211.html
/** *第一步,dispatchTouchEvent, *false:结束 *true:到onInterceptTouchEvent *第二步:到onInterceptTouchEvent, *true:到viewGroup的onTouchEvent *false:到ViewdispatchTouchEvent *第三步:ViewdispatchTouchEvent *第四步:ViewonTouchEvent *true:view消费touch事件,viewGroup不能消费 *false:viewGroup决定是否消费touch事件 * * *@paramev *@return */
例子原型 MyLinearLayout包含一个MyView 情况一,
MyLinearLayout, dispatchTouchEvent返回false onInterceptTouchEvent返回false onTouchEvent返回false MyView dispatchTouchEvent返回false onTouchEvent返回false
结果
03-1815:26:00.7266884-6884/com.example.myappD/zyr﹕ADISACTION_DOWN 03-1815:26:00.7266884-6884/com.example.myappD/zyr﹕AINTACTION_DOWN 03-1815:26:00.7266884-6884/com.example.myappE/zyr﹕BDISACTION_DOWN 03-1815:26:00.7266884-6884/com.example.myappE/zyr﹕BTOUACTION_DOWN 03-1815:26:00.7266884-6884/com.example.myappD/zyr﹕ATOUACTION_DOWN 03-1815:26:05.3966884-6884/com.example.myappD/zyr﹕ADISACTION_DOWN 03-1815:26:05.3966884-6884/com.example.myappD/zyr﹕AINTACTION_DOWN 03-1815:26:05.3966884-6884/com.example.myappE/zyr﹕BDISACTION_DOWN 03-1815:26:05.3966884-6884/com.example.myappE/zyr﹕BTOUACTION_DOWN 03-1815:26:05.3966884-6884/com.example.myappD/zyr﹕ATOUACTION_DOWN
结论
由图,没有view消费本次触摸事件,Action_Move事件根本传递不进来
情况二,
MyLinearLayout, dispatchTouchEvent返回false onInterceptTouchEvent返回false onTouchEvent返回false MyView dispatchTouchEvent返回false onTouchEvent返回true
结果
03-1815:36:33.64110292-10292/com.example.myappD/zyr﹕ADISACTION_DOWN 03-1815:36:33.64110292-10292/com.example.myappD/zyr﹕AINTACTION_DOWN 03-1815:36:33.64110292-10292/com.example.myappE/zyr﹕BDISACTION_DOWN 03-1815:36:33.64110292-10292/com.example.myappE/zyr﹕BTOUACTION_DOWN 03-1815:36:33.67610292-10292/com.example.myappD/zyr﹕ADISACTION_MOVE 03-1815:36:33.67610292-10292/com.example.myappD/zyr﹕AINTACTION_MOVE 03-1815:36:33.67610292-10292/com.example.myappE/zyr﹕BDISACTION_MOVE 03-1815:36:33.67610292-10292/com.example.myappE/zyr﹕BTOUACTION_MOVE 03-1815:36:33.69110292-10292/com.example.myappD/zyr﹕ADISACTION_MOVE 03-1815:36:33.69110292-10292/com.example.myappD/zyr﹕AINTACTION_MOVE 03-1815:36:33.69110292-10292/com.example.myappE/zyr﹕BDISACTION_MOVE 03-1815:36:33.69110292-10292/com.example.myappE/zyr﹕BTOUACTION_MOVE 03-1815:36:33.71110292-10292/com.example.myappD/zyr﹕ADISACTION_MOVE 03-1815:36:33.71110292-10292/com.example.myappD/zyr﹕AINTACTION_MOVE 03-1815:36:33.71110292-10292/com.example.myappE/zyr﹕BDISACTION_MOVE 03-1815:36:33.71110292-10292/com.example.myappE/zyr﹕BTOUACTION_MOVE 03-1815:36:33.72110292-10292/com.example.myappD/zyr﹕ADISACTION_MOVE 03-1815:36:33.72110292-10292/com.example.myappD/zyr﹕AINTACTION_MOVE 03-1815:36:33.72110292-10292/com.example.myappE/zyr﹕BDISACTION_MOVE 03-1815:36:33.72110292-10292/com.example.myappE/zyr﹕BTOUACTION_MOVE 03-1815:36:33.72110292-10292/com.example.myappD/zyr﹕ADISACTION_UP 03-1815:36:33.72110292-10292/com.example.myappD/zyr﹕AINTACTION_UP 03-1815:36:33.72110292-10292/com.example.myappE/zyr﹕BDISACTION_UP 03-1815:36:33.72110292-10292/com.example.myappE/zyr﹕BTOUACTION_UP
结论
MyView消费ACTION_DOWN,之后ACTION_MOVE传递进来,消费ACTION_MOVE,ACTION_UP同理
情况三,
MyLinearLayout, dispatchTouchEvent返回false onInterceptTouchEvent返回false onTouchEvent返回true MyView dispatchTouchEvent返回false onTouchEvent返回true
结果
03-1815:40:18.05629163-29163/com.example.myappD/zyr﹕ADISACTION_DOWN 03-1815:40:18.05629163-29163/com.example.myappD/zyr﹕AINTACTION_DOWN 03-1815:40:18.05629163-29163/com.example.myappE/zyr﹕BDISACTION_DOWN 03-1815:40:18.05629163-29163/com.example.myappE/zyr﹕BTOUACTION_DOWN 03-1815:40:18.07629163-29163/com.example.myappD/zyr﹕ADISACTION_MOVE 03-1815:40:18.07629163-29163/com.example.myappD/zyr﹕AINTACTION_MOVE 03-1815:40:18.07629163-29163/com.example.myappE/zyr﹕BDISACTION_MOVE 03-1815:40:18.07629163-29163/com.example.myappE/zyr﹕BTOUACTION_MOVE 03-1815:40:18.09629163-29163/com.example.myappD/zyr﹕ADISACTION_MOVE 03-1815:40:18.09629163-29163/com.example.myappD/zyr﹕AINTACTION_MOVE 03-1815:40:18.09629163-29163/com.example.myappE/zyr﹕BDISACTION_MOVE 03-1815:40:18.09629163-29163/com.example.myappE/zyr﹕BTOUACTION_MOVE 03-1815:40:18.11129163-29163/com.example.myappD/zyr﹕ADISACTION_MOVE 03-1815:40:18.11129163-29163/com.example.myappD/zyr﹕AINTACTION_MOVE 03-1815:40:18.11129163-29163/com.example.myappE/zyr﹕BDISACTION_MOVE 03-1815:40:18.11129163-29163/com.example.myappE/zyr﹕BTOUACTION_MOVE 03-1815:40:18.12629163-29163/com.example.myappD/zyr﹕ADISACTION_MOVE 03-1815:40:18.12629163-29163/com.example.myappD/zyr﹕AINTACTION_MOVE 03-1815:40:18.12629163-29163/com.example.myappE/zyr﹕BDISACTION_MOVE 03-1815:40:18.12629163-29163/com.example.myappE/zyr﹕BTOUACTION_MOVE 03-1815:40:18.13129163-29163/com.example.myappD/zyr﹕ADISACTION_UP 03-1815:40:18.13129163-29163/com.example.myappD/zyr﹕AINTACTION_UP 03-1815:40:18.13129163-29163/com.example.myappE/zyr﹕BDISACTION_UP 03-1815:40:18.13129163-29163/com.example.myappE/zyr﹕BTOUACTION_UP
结论
虽然MyLinearLayout的onTouch返回true,但是MyTouch也是返回true,由于安卓触摸事件传递是由上而下,但是消费触摸事件是由下而上的,所以处于下面的MyView消费掉了触摸事件,MyLinearLayout无法消费
情况四,
研究onInterceptTouchEvent
MyLinearLayout, dispatchTouchEvent返回false onInterceptTouchEvent返回true onTouchEvent返回false MyView dispatchTouchEvent返回false onTouchEvent返回true
结果
03-1815:44:37.70120477-20477/com.example.myappD/zyr﹕ADISACTION_DOWN 03-1815:44:37.70120477-20477/com.example.myappD/zyr﹕AINTACTION_DOWN 03-1815:44:37.70120477-20477/com.example.myappD/zyr﹕ATOUACTION_DOWN
结论
虽然MyView的onTouch返回true,但是被MyLinearLayout拦截下来了(MyLinearLayout的onInterceptTouchEvent返回true),但是MyLinearLayout的onTouch返回false,即它并没有消费此次触摸事件,so,,,此次触摸事件就此结束,当然Action_Move是没有机会传递拉.
情况五,
MyLinearLayout, dispatchTouchEvent返回false onInterceptTouchEvent ACTION_DOWN,false ACTION_MOVE,true ACTION_UP,false onTouchEvent ACTION_DOWN,false ACTION_MOVE,true ACTION_UP,false MyView dispatchTouchEvent返回false onTouchEvent返回true
结果
03-1816:09:36.2418257-8257/com.example.myappD/zyr﹕ADISACTION_DOWN 03-1816:09:36.2418257-8257/com.example.myappD/zyr﹕AINTACTION_DOWN 03-1816:09:36.2418257-8257/com.example.myappE/zyr﹕BDISACTION_DOWN 03-1816:09:36.2418257-8257/com.example.myappE/zyr﹕BTOUACTION_DOWN 03-1816:09:36.2718257-8257/com.example.myappD/zyr﹕ADISACTION_MOVE 03-1816:09:36.2718257-8257/com.example.myappD/zyr﹕AINTACTION_MOVE 03-1816:09:36.2968257-8257/com.example.myappD/zyr﹕ADISACTION_MOVE 03-1816:09:36.2968257-8257/com.example.myappD/zyr﹕ATOUACTION_MOVE 03-1816:09:36.2968257-8257/com.example.myappD/zyr﹕ADISACTION_UP 03-1816:09:36.2968257-8257/com.example.myappD/zyr﹕ATOUACTION_UP
结论
试着自己分析把.
相关文章推荐
- 用Gvim建立IDE编程环境 (Windows篇)
- 夺命雷公狗---DEDECMS----12dedecms全局标签的使用以及嵌套标签的使用
- C# 加解密算法
- jquery和c#和adb的关联
- struts2和sybase和shell的关联
- tcpdump和apk和lua的关联
- plsql和context和opencv的关联
- ruby和spring和weblogic的关联
- plsql和jetty和mangodb的关联
- maven和plsql和php的关联
- jre和aspx和c#的关联
- jquery和apk和dos的关联
- redis和dll和ssh的关联
- Hbase 常用命令
- jsp和plsql和perl的关联
- How-to: Install Apache Zeppelin on CDH
- TrustZone OP-TEE 在 FVP 编译与测试
- Linux中的Apache服务查看和启动的方法
- UpdatePanel学习
- Java升级后Eclipse报错