以前对事件分发还是一知半解,今天特意重新打印了分发前后的日志
- dispatchTouchEvent
逐级往下分发,默认Activity执行完会执行下一个ViewGroup的分发方法,返回值为true
如果改成false (默认认为分发失败,执行上一级的触摸事件),该控件触摸事件也会被正常执行
- onInterceptTouchEvent
打断事件,只有ViewGroup里头有该方法,进入ViewGroup分发事件后不会立即执行下一级的分发,而是进入是否打断事件,默认返回false,进入下一级的分发。
如果返回true会让该ViewGroup的onTouchEvent执行触摸事件
- onTouchEvent
除了最终View默认返回true,ViewGroup和Activity都是false
消费事件,默认最终的View返回true,表示消费了事件。
如果View触摸事件down返回false,那么上级全部的触摸down事件都会执行,事件一直到window无法得到消费完成,后续move、up直接忽略。
但是如果执行到move事件才返回false ,后续move 事件仍能接收。
- onTouch
实现接口会回调这个方法,只要return true 后拦截,后续onTouchEvent都不会执行
如果点击在ViewGroup上,那么打断事件执行完(false)后执行VG的触摸事件,并返回false(同上行)
点击、长按、触摸
onTouch(接口方法体)->onTouchEvent(触摸事件)->onLongClick(长按事件)->onClick(点击事件) 分发
View onTouchEvent false
12-26 11:45:17.200 12449-12449/mobi.xiaowu.dispatchevent I/MY: MainActivityS dispatchTouchEvent: 按下
12-26 11:45:17.201 12449-12449/mobi.xiaowu.dispatchevent I/MY: MyViewGroupS dispatchTouchEvent: 按下
12-26 11:45:17.201 12449-12449/mobi.xiaowu.dispatchevent I/MY: MyViewGroupS onInterceptTouchEvent: 按下
12-26 11:45:17.201 12449-12449/mobi.xiaowu.dispatchevent I/MY: MyViewGroupE onInterceptTouchEvent: false按下
12-26 11:45:17.201 12449-12449/mobi.xiaowu.dispatchevent I/MY: MyButtonS dispatchTouchEvent: 按下
12-26 11:45:17.201 12449-12449/mobi.xiaowu.dispatchevent I/MY: MyButtonS onTouchEvent: 按下
12-26 11:45:17.201 12449-12449/mobi.xiaowu.dispatchevent I/MY: MyButtonE onTouchEvent: false按下
12-26 11:45:17.201 12449-12449/mobi.xiaowu.dispatchevent I/MY: MyButtonE dispatchTouchEvent: false按下
12-26 11:45:17.201 12449-12449/mobi.xiaowu.dispatchevent I/MY: MyViewGroupS onTouchEvent: 按下
12-26 11:45:17.201 12449-12449/mobi.xiaowu.dispatchevent I/MY: MyViewGroupE onTouchEvent: false按下
12-26 11:45:17.202 12449-12449/mobi.xiaowu.dispatchevent I/MY: MyViewGroupE dispatchTouchEvent: false按下
12-26 11:45:17.202 12449-12449/mobi.xiaowu.dispatchevent I/MY: MainActivityS onTouchEvent: 按下
12-26 11:45:17.202 12449-12449/mobi.xiaowu.dispatchevent I/MY: MainActivityE onTouchEvent: false按下
12-26 11:45:17.202 12449-12449/mobi.xiaowu.dispatchevent I/MY: MainActivityE dispatchTouchEvent: false按下
12-26 11:45:17.212 12449-12449/mobi.xiaowu.dispatchevent I/MY: MainActivityS dispatchTouchEvent: 抬起
12-26 11:45:17.212 12449-12449/mobi.xiaowu.dispatchevent I/MY: MainActivityS onTouchEvent: 抬起
12-26 11:45:17.212 12449-12449/mobi.xiaowu.dispatchevent I/MY: MainActivityE onTouchEvent: false抬起
12-26 11:45:17.213 12449-12449/mobi.xiaowu.dispatchevent I/MY: MainActivityE dispatchTouchEvent: false抬起
View onTouchEvent default = true
12-26 11:47:00.112 13973-13973/mobi.xiaowu.dispatchevent I/MY: MainActivityS dispatchTouchEvent: 按下
12-26 11:47:00.112 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyViewGroupS dispatchTouchEvent: 按下
12-26 11:47:00.112 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyViewGroupS onInterceptTouchEvent: 按下
12-26 11:47:00.112 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyViewGroupE onInterceptTouchEvent: false按下
12-26 11:47:00.112 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyButtonS dispatchTouchEvent: 按下
12-26 11:47:00.112 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyButtonS onTouchEvent: 按下
12-26 11:47:00.113 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyButtonE onTouchEvent: true按下
12-26 11:47:00.113 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyButtonE dispatchTouchEvent: true按下
12-26 11:47:00.113 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyViewGroupE dispatchTouchEvent: true按下
12-26 11:47:00.114 13973-13973/mobi.xiaowu.dispatchevent I/MY: MainActivityE dispatchTouchEvent: true按下
12-26 11:47:00.129 13973-13973/mobi.xiaowu.dispatchevent I/MY: MainActivityS dispatchTouchEvent: 抬起
12-26 11:47:00.130 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyViewGroupS dispatchTouchEvent: 抬起
12-26 11:47:00.130 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyViewGroupS onInterceptTouchEvent: 抬起
12-26 11:47:00.130 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyViewGroupE onInterceptTouchEvent: false抬起
12-26 11:47:00.130 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyButtonS dispatchTouchEvent: 抬起
12-26 11:47:00.130 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyButtonS onTouchEvent: 抬起
12-26 11:47:00.130 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyButtonE onTouchEvent: true抬起
12-26 11:47:00.130 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyButtonE dispatchTouchEvent: true抬起
12-26 11:47:00.130 13973-13973/mobi.xiaowu.dispatchevent I/MY: MyViewGroupE dispatchTouchEvent: true抬起
12-26 11:47:00.130 13973-13973/mobi.xiaowu.dispatchevent I/MY: MainActivityE dispatchTouchEvent: true抬起
View onDispatchTouchEvent false
//表明分发未完成 无法传递到View的onTouchEvent事件 于是父控件执行onTouchEvent事件
12-26 12:11:09.026 5596-5596/mobi.xiaowu.dispatchevent I/MY: MainActivityS dispatchTouchEvent: 按下
12-26 12:11:09.027 5596-5596/mobi.xiaowu.dispatchevent I/MY: MyViewGroupS dispatchTouchEvent: 按下
12-26 12:11:09.027 5596-5596/mobi.xiaowu.dispatchevent I/MY: MyViewGroupS onInterceptTouchEvent: 按下
12-26 12:11:09.027 5596-5596/mobi.xiaowu.dispatchevent I/MY: MyViewGroupE onInterceptTouchEvent: false按下
12-26 12:11:09.027 5596-5596/mobi.xiaowu.dispatchevent I/MY: MyButtonS dispatchTouchEvent: 按下
12-26 12:11:09.027 5596-5596/mobi.xiaowu.dispatchevent I/MY: MyButtonE dispatchTouchEvent: false按下
12-26 12:11:09.027 5596-5596/mobi.xiaowu.dispatchevent I/MY: MyViewGroupS onTouchEvent: 按下
12-26 12:11:09.027 5596-5596/mobi.xiaowu.dispatchevent I/MY: MyViewGroupE onTouchEvent: false按下
12-26 12:11:09.027 5596-5596/mobi.xiaowu.dispatchevent I/MY: MyViewGroupE dispatchTouchEvent: false按下
12-26 12:11:09.027 5596-5596/mobi.xiaowu.dispatchevent I/MY: MainActivityS onTouchEvent: 按下
12-26 12:11:09.027 5596-5596/mobi.xiaowu.dispatchevent I/MY: MainActivityE onTouchEvent: false按下
12-26 12:11:09.028 5596-5596/mobi.xiaowu.dispatchevent I/MY: MainActivityE dispatchTouchEvent: false按下
12-26 12:11:09.045 5596-5596/mobi.xiaowu.dispatchevent I/MY: MainActivityS dispatchTouchEvent: 抬起
12-26 12:11:09.045 5596-5596/mobi.xiaowu.dispatchevent I/MY: MainActivityS onTouchEvent: 抬起
12-26 12:11:09.045 5596-5596/mobi.xiaowu.dispatchevent I/MY: MainActivityE onTouchEvent: false抬起
12-26 12:11:09.045 5596-5596/mobi.xiaowu.dispatchevent I/MY: MainActivityE dispatchTouchEvent: false抬起
View onDispatchTouchEvent true
//表明分发完成,不执行onTouchEvent(分发事件默认是super方法执行View的onTouchEvent,直接返回true就不会执行onTouchEvent)
12-26 12:13:51.674 8266-8266/mobi.xiaowu.dispatchevent I/MY: MainActivityS dispatchTouchEvent: 按下
12-26 12:13:51.674 8266-8266/mobi.xiaowu.dispatchevent I/MY: MyViewGroupS dispatchTouchEvent: 按下
12-26 12:13:51.674 8266-8266/mobi.xiaowu.dispatchevent I/MY: MyViewGroupS onInterceptTouchEvent: 按下
12-26 12:13:51.674 8266-8266/mobi.xiaowu.dispatchevent I/MY: MyViewGroupE onInterceptTouchEvent: false按下
12-26 12:13:51.674 8266-8266/mobi.xiaowu.dispatchevent I/MY: MyButtonS dispatchTouchEvent: 按下
12-26 12:13:51.674 8266-8266/mobi.xiaowu.dispatchevent I/MY: MyButtonE dispatchTouchEvent: true按下
12-26 12:13:51.675 8266-8266/mobi.xiaowu.dispatchevent I/MY: MyViewGroupE dispatchTouchEvent: true按下
12-26 12:13:51.675 8266-8266/mobi.xiaowu.dispatchevent I/MY: MainActivityE dispatchTouchEvent: true按下
12-26 12:13:51.697 8266-8266/mobi.xiaowu.dispatchevent I/MY: MainActivityS dispatchTouchEvent: 抬起
12-26 12:13:51.697 8266-8266/mobi.xiaowu.dispatchevent I/MY: MyViewGroupS dispatchTouchEvent: 抬起
12-26 12:13:51.697 8266-8266/mobi.xiaowu.dispatchevent I/MY: MyViewGroupS onInterceptTouchEvent: 抬起
12-26 12:13:51.697 8266-8266/mobi.xiaowu.dispatchevent I/MY: MyViewGroupE onInterceptTouchEvent: false抬起
12-26 12:13:51.697 8266-8266/mobi.xiaowu.dispatchevent I/MY: MyButtonS dispatchTouchEvent: 抬起
12-26 12:13:51.698 8266-8266/mobi.xiaowu.dispatchevent I/MY: MyButtonE dispatchTouchEvent: true抬起
12-26 12:13:51.698 8266-8266/mobi.xiaowu.dispatchevent I/MY: MyViewGroupE dispatchTouchEvent: true抬起
12-26 12:13:51.698 8266-8266/mobi.xiaowu.dispatchevent I/MY: MainActivityE dispatchTouchEvent: true抬起