View的事件分发机制
来源:互联网 发布:音序器软件中文版 编辑:程序博客网 时间:2024/05/17 08:43
废话不多说,直接上代码
我的布局为 viewgroup包含viewgroup里面嵌套view,布局层级关系如图:
每个view都重写了DispatchtouchEvent、OnInterceptTouchEvent、OnTouchEvent方法。其中,非ViewGroup的view没有OnInterceptTouchEvent方法
现在我们点击最外层的view,
事件的响应顺序如下:最外层的viewgroup 的dispatchtouchevent先响应,触发action down事件,然后onintercepttouchevent的action down触发,然后ontouchevent的action down触发,因为每一层都没拦截,最后会调用最外层的viewgroup的dispatchtouchevent的 action up,然后是ontouchevent的action up方法,最后最外层的viewgroup的onclick事件响应
2、当点击内层的viewgroup的时候,响应顺序如下:
E/zp: MyLinearLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyLinearLayout onTouchEvent ACTION_DOWN
E/zp: MyLinearLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_UP
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onTouchEvent ACTION_UP
E/zp: llInner onclick
事件的响应顺序为:可以看出,由外而内,先判断action down,然后判断action up,最后消费
3、当点击内层的view的时候,响应顺序:
E/zp: MyLinearLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_DO
E/zp: MyTextView dispatchTouchEvent ACTION_DOWN
E/zp: MyTextView onTouchEvent ACTION_DOWN
E/zp: MyLinearLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_UP
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_UP
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_UP
E/zp: MyTextView dispatchTouchEvent ACTION_UP
E/zp: MyTextView onTouchEvent ACTION_UP
E/zp: tv onclick
事件的响应顺序为:可以看出,由外而内,先判断action down,然后判断action up,最后由最内层的view消费
二、当最内层的textview的dispatchtouchevent 方法 action down返回true时候,
E/zp: MyLinearLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyTextView dispatchTouchEvent ACTION_DOWN
E/zp: MyLinearLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_UP
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_UP
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_UP
E/zp: MyTextView dispatchTouchEvent ACTION_UP
E/zp: MyTextView onTouchEvent ACTION_UP
该view消费了事件,onclick点击无响应,被拦截
2、当最内层的textiview的dispatchtouchevent 方法 action up返回true时候,
E/zp: MyLinearLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyTextView dispatchTouchEvent ACTION_DOWN
E/zp: MyTextView onTouchEvent ACTION_DOWN
E/zp: MyLinearLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_UP
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_UP
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_UP
E/zp: MyTextView dispatchTouchEvent ACTION_UP
该view消费了事件,onclick点击无响应,被拦截。同时onTouchEvent ACTION_UP 也被拦截
3、当最内层的texiview的onTouchEvent的ACTION_DOWN返回true的时候,
E/zp: MyLinearLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyTextView dispatchTouchEvent ACTION_DOWN
E/zp: MyTextView onTouchEvent ACTION_DOWN
E/zp: MyLinearLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_UP
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_UP
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_UP
E/zp: MyTextView dispatchTouchEvent ACTION_UP
E/zp: MyTextView onTouchEvent ACTION_UP
4、当最内层的texiview的onTouchEvent的ACTION_up返回true的时候,
E/zp: MyLinearLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyTextView dispatchTouchEvent ACTION_DOWN
E/zp: MyTextView onTouchEvent ACTION_DOWN
E/zp: MyLinearLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_UP
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_UP
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_UP
E/zp: MyTextView dispatchTouchEvent ACTION_UP
E/zp: MyTextView onTouchEvent ACTION_UP
5、当内层的viewgroup的dispatchtouchevent的action down返回true的时候,
E/zp: MyLinearLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyLinearLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_UP
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onTouchEvent ACTION_UP
6、当内层的viewgroup的dispatchtouchevent的action up返回true的时候,
E/zp: MyLinearLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyTextView dispatchTouchEvent ACTION_DOWN
E/zp: MyTextView onTouchEvent ACTION_DOWN
E/zp: MyLinearLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_UP
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_UP
7、当内层的viewgroup的interceptouchEvent的action down返回true的时候,
E/zp: MyLinearLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyLinearLayout onTouchEvent ACTION_DOWN
E/zp: MyLinearLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_UP
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onTouchEvent ACTION_UP
E/zp: llInner onclick(内层的viewgroup的点击事件响应了)
8、当内层的viewgroup的interceptouchEvent的action up返回true的时候,
E/zp: MyLinearLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyTextView dispatchTouchEvent ACTION_DOWN
E/zp: MyTextView onTouchEvent ACTION_DOWN
E/zp: MyLinearLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_UP
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_UP
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_UP
9、当内层的viewgroup的onTouchEvent的action DOWN 返回true的时候,
E/zp: MyLinearLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyTextView dispatchTouchEvent ACTION_DOWN
E/zp: MyTextView onTouchEvent ACTION_DOWN
E/zp: MyLinearLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_UP
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_UP
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_UP
E/zp: MyTextView dispatchTouchEvent ACTION_UP
E/zp: MyTextView onTouchEvent ACTION_UP
E/zp: tv onclick (最内层的view的点击事件响应了)
10、当内层的viewgroup的onTouchEvent的action up返回true的时候,
E/zp: MyLinearLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_DOWN
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_DOWN
E/zp: MyTextView dispatchTouchEvent ACTION_DOWN
E/zp: MyTextView onTouchEvent ACTION_DOWN
E/zp: MyLinearLayout dispatchTouchEvent ACTION_UP
E/zp: MyLinearLayout onInterceptTouchEvent ACTION_UP
E/zp: MyRelativeLayout dispatchTouchEvent ACTION_UP
E/zp: MyRelativeLayout onInterceptTouchEvent ACTION_UP
E/zp: MyTextView dispatchTouchEvent ACTION_UP
E/zp: MyTextView onTouchEvent ACTION_UP
E/zp: tv onclick (最内层的view的点击事件响应了)
四、从上述事件的点击事件可以看出,view的分发流程如下:
- View 的事件分发机制
- View的事件分发机制。
- View的事件分发机制
- View的事件分发机制
- view的事件分发机制
- View的事件分发机制
- View的事件分发机制
- View的事件分发机制
- view的事件分发机制
- View的事件分发机制
- View的事件分发机制
- View事件的分发机制
- View的事件分发机制
- View的事件分发机制
- View的事件分发机制
- View 的事件分发机制
- View的事件分发机制
- View的事件分发机制
- ionic侧滑
- gpu 性能容量的单位是啥
- LeetCode 5. Longest Palindromic Substring
- MVP +Retrofit +Rxjava 请求
- 可变长数组的 OO 实现
- View的事件分发机制
- filter修改request参数
- Android 开发进阶路线
- 区块链简介
- C C++ 字符串分割
- 516. Longest Palindromic Subsequence
- 进程结构
- vi,vim 神器
- 99乘法表