安卓触摸事件探究

来源:互联网 发布:中华姓氏家谱编辑软件 编辑:程序博客网 时间:2024/05/24 01:39
参考,http://blog.csdn.net/chunqiuwei/article/details/41084921
复制代码
/** * 第一步,dispatchTouchEvent, *          false:结束 *          true:到onInterceptTouchEvent *              第二步:到onInterceptTouchEvent, *                  true:到viewGroup的onTouchEvent *                  false:到View dispatchTouchEvent *                      第三步:View dispatchTouchEvent *                          第四步:View onTouchEvent *                                true:view消费touch事件,viewGroup不能消费 *                                false:viewGroup决定是否消费touch事件 * * * @param ev * @return */
复制代码
例子原型
MyLinearLayout包含一个MyView
情况一,
复制代码
MyLinearLayout,    dispatchTouchEvent返回false    onInterceptTouchEvent返回false    onTouchEvent返回falseMyView    dispatchTouchEvent返回false      onTouchEvent返回false
复制代码
结果
复制代码
03-18 15:26:00.726    6884-6884/com.example.myapp D/zyr﹕ A DIS ACTION_DOWN03-18 15:26:00.726    6884-6884/com.example.myapp D/zyr﹕ A INT ACTION_DOWN03-18 15:26:00.726    6884-6884/com.example.myapp E/zyr﹕ B DIS ACTION_DOWN03-18 15:26:00.726    6884-6884/com.example.myapp E/zyr﹕ B TOU ACTION_DOWN03-18 15:26:00.726    6884-6884/com.example.myapp D/zyr﹕ A TOU ACTION_DOWN03-18 15:26:05.396    6884-6884/com.example.myapp D/zyr﹕ A DIS ACTION_DOWN03-18 15:26:05.396    6884-6884/com.example.myapp D/zyr﹕ A INT ACTION_DOWN03-18 15:26:05.396    6884-6884/com.example.myapp E/zyr﹕ B DIS ACTION_DOWN03-18 15:26:05.396    6884-6884/com.example.myapp E/zyr﹕ B TOU ACTION_DOWN03-18 15:26:05.396    6884-6884/com.example.myapp D/zyr﹕ A TOU ACTION_DOWN
复制代码

结论

由图,没有view消费本次触摸事件,Action_Move事件根本传递不进来

情况二,

复制代码
MyLinearLayout,    dispatchTouchEvent返回false    onInterceptTouchEvent返回false    onTouchEvent返回falseMyView    dispatchTouchEvent返回false      onTouchEvent返回true
复制代码

结果

复制代码
03-18 15:36:33.641  10292-10292/com.example.myapp D/zyr﹕ A DIS ACTION_DOWN03-18 15:36:33.641  10292-10292/com.example.myapp D/zyr﹕ A INT ACTION_DOWN03-18 15:36:33.641  10292-10292/com.example.myapp E/zyr﹕ B DIS ACTION_DOWN03-18 15:36:33.641  10292-10292/com.example.myapp E/zyr﹕ B TOU ACTION_DOWN03-18 15:36:33.676  10292-10292/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE03-18 15:36:33.676  10292-10292/com.example.myapp D/zyr﹕ A INT ACTION_MOVE03-18 15:36:33.676  10292-10292/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE03-18 15:36:33.676  10292-10292/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE03-18 15:36:33.691  10292-10292/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE03-18 15:36:33.691  10292-10292/com.example.myapp D/zyr﹕ A INT ACTION_MOVE03-18 15:36:33.691  10292-10292/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE03-18 15:36:33.691  10292-10292/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE03-18 15:36:33.711  10292-10292/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE03-18 15:36:33.711  10292-10292/com.example.myapp D/zyr﹕ A INT ACTION_MOVE03-18 15:36:33.711  10292-10292/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE03-18 15:36:33.711  10292-10292/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE03-18 15:36:33.721  10292-10292/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE03-18 15:36:33.721  10292-10292/com.example.myapp D/zyr﹕ A INT ACTION_MOVE03-18 15:36:33.721  10292-10292/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE03-18 15:36:33.721  10292-10292/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE03-18 15:36:33.721  10292-10292/com.example.myapp D/zyr﹕ A DIS ACTION_UP03-18 15:36:33.721  10292-10292/com.example.myapp D/zyr﹕ A INT ACTION_UP03-18 15:36:33.721  10292-10292/com.example.myapp E/zyr﹕ B DIS ACTION_UP03-18 15:36:33.721  10292-10292/com.example.myapp E/zyr﹕ B TOU ACTION_UP
复制代码

结论

MyView消费ACTION_DOWN,之后ACTION_MOVE传递进来,消费ACTION_MOVE,ACTION_UP同理

 情况三,

复制代码
MyLinearLayout,    dispatchTouchEvent返回false    onInterceptTouchEvent返回false    onTouchEvent返回trueMyView    dispatchTouchEvent返回false      onTouchEvent返回true
复制代码

结果

复制代码
03-18 15:40:18.056  29163-29163/com.example.myapp D/zyr﹕ A DIS ACTION_DOWN03-18 15:40:18.056  29163-29163/com.example.myapp D/zyr﹕ A INT ACTION_DOWN03-18 15:40:18.056  29163-29163/com.example.myapp E/zyr﹕ B DIS ACTION_DOWN03-18 15:40:18.056  29163-29163/com.example.myapp E/zyr﹕ B TOU ACTION_DOWN03-18 15:40:18.076  29163-29163/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE03-18 15:40:18.076  29163-29163/com.example.myapp D/zyr﹕ A INT ACTION_MOVE03-18 15:40:18.076  29163-29163/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE03-18 15:40:18.076  29163-29163/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE03-18 15:40:18.096  29163-29163/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE03-18 15:40:18.096  29163-29163/com.example.myapp D/zyr﹕ A INT ACTION_MOVE03-18 15:40:18.096  29163-29163/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE03-18 15:40:18.096  29163-29163/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE03-18 15:40:18.111  29163-29163/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE03-18 15:40:18.111  29163-29163/com.example.myapp D/zyr﹕ A INT ACTION_MOVE03-18 15:40:18.111  29163-29163/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE03-18 15:40:18.111  29163-29163/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE03-18 15:40:18.126  29163-29163/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE03-18 15:40:18.126  29163-29163/com.example.myapp D/zyr﹕ A INT ACTION_MOVE03-18 15:40:18.126  29163-29163/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE03-18 15:40:18.126  29163-29163/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE03-18 15:40:18.131  29163-29163/com.example.myapp D/zyr﹕ A DIS ACTION_UP03-18 15:40:18.131  29163-29163/com.example.myapp D/zyr﹕ A INT ACTION_UP03-18 15:40:18.131  29163-29163/com.example.myapp E/zyr﹕ B DIS ACTION_UP03-18 15:40:18.131  29163-29163/com.example.myapp E/zyr﹕ B TOU ACTION_UP
复制代码

结论

虽然MyLinearLayout的onTouch返回true,但是MyTouch也是返回true,由于安卓触摸事件传递是由上而下,但是消费触摸事件是由下而上的,所以处于下面的MyView消费掉了触摸事件,MyLinearLayout无法消费

情况四,

研究onInterceptTouchEvent

复制代码
MyLinearLayout,    dispatchTouchEvent返回false    onInterceptTouchEvent返回true    onTouchEvent返回falseMyView    dispatchTouchEvent返回false      onTouchEvent返回true
复制代码

结果

03-18 15:44:37.701  20477-20477/com.example.myapp D/zyr﹕ A DIS ACTION_DOWN03-18 15:44:37.701  20477-20477/com.example.myapp D/zyr﹕ A INT ACTION_DOWN03-18 15:44:37.701  20477-20477/com.example.myapp D/zyr﹕ A TOU ACTION_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,falseMyView    dispatchTouchEvent返回false      onTouchEvent返回true    
复制代码

结果

复制代码
03-18 16:09:36.241    8257-8257/com.example.myapp D/zyr﹕ A DIS ACTION_DOWN03-18 16:09:36.241    8257-8257/com.example.myapp D/zyr﹕ A INT ACTION_DOWN03-18 16:09:36.241    8257-8257/com.example.myapp E/zyr﹕ B DIS ACTION_DOWN03-18 16:09:36.241    8257-8257/com.example.myapp E/zyr﹕ B TOU ACTION_DOWN03-18 16:09:36.271    8257-8257/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE03-18 16:09:36.271    8257-8257/com.example.myapp D/zyr﹕ A INT ACTION_MOVE03-18 16:09:36.296    8257-8257/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE03-18 16:09:36.296    8257-8257/com.example.myapp D/zyr﹕ A TOU ACTION_MOVE03-18 16:09:36.296    8257-8257/com.example.myapp D/zyr﹕ A DIS ACTION_UP03-18 16:09:36.296    8257-8257/com.example.myapp D/zyr﹕ A TOU ACTION_UP
复制代码

结论


MyLinearLayout,    dispatchTouchEvent返回false    onInterceptTouchEvent                       ACTION_DOWN,false                       ACTION_MOVE,false                       ACTION_UP,false    onTouchEvent                       ACTION_DOWN,true                       ACTION_MOVE,true                       ACTION_UP,trueMyView    dispatchTouchEvent返回false      onTouchEvent返回true    



03-28 16:00:01.036      628-628/com.example.myapp D/zyr﹕ A DIS ACTION_DOWN03-28 16:00:01.036      628-628/com.example.myapp D/zyr﹕ A INT ACTION_DOWN03-28 16:00:01.036      628-628/com.example.myapp D/zyrr﹕ isInRange:true03-28 16:00:01.036      628-628/com.example.myapp E/zyr﹕ B DIS ACTION_DOWN03-28 16:00:01.036      628-628/com.example.myapp E/zyr﹕ B TOU ACTION_DOWN03-28 16:00:01.046      628-628/com.example.myapp D/zyr﹕ A DIS ACTION_UP03-28 16:00:01.046      628-628/com.example.myapp D/zyr﹕ A INT ACTION_UP03-28 16:00:01.051      628-628/com.example.myapp E/zyr﹕ B DIS ACTION_UP03-28 16:00:01.051      628-628/com.example.myapp E/zyr﹕ B TOU ACTION_UP



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一个好的项目需要资金怎么办 没有做暂估入库的凭证怎么办 电脑显示宽带连接已断开怎么办 电脑ip地址连不上网怎么办 百度网盘资源打不开怎么办 百度网盘视频格式不支持怎么办 origin注册邮箱填错了怎么办 58同城手机输入不合法怎么办 银行卡密码输入错误三次怎么办 私密相册系统升级后打不开怎么办 由于志愿没填好孩子没书读怎么办 文具店不开了货怎么办 华为手机通讯录联系人重复怎么办 vcf文件用表格打开乱码怎么办 表格打出来太小怎么办 企业列入经营异常名录怎么办 小米电视滚动字幕模糊怎么办 海信电视浑的看不清怎么办 电视打开特别暗看不清怎么办 诈骗电话按了键怎么办 上海油电混合送沪牌以后怎么办? 车子被前夫砸了怎么办 老的标书丢了怎么办 拍牌照的标书掉了怎么办 上海拍到车牌后怎么办 杭州4s店车牌怎么办 天津车牌有指标想买车怎么办 上海大牌拍中了怎么办 买新车牌下不了怎么办 临沂上小学没报上名怎么办 早教中心倒闭了怎么办 企业税没交联系不上法人怎么办 企业被拉黑法人联系不到怎么办 支票根写错了怎么办 月结客户不付款怎么办 退市整理期过了怎么办 老板跑了财务负责人怎么办 在南京加入嘀嘀代驾怎么办 苹果盗刷支付宝怎么办 街电支付宝掉了怎么办 转转上号器没有苹果版的怎么办