事件分发
所谓事件,就是点击事件,即MitionEvent对象;事件分发,就是对MotionEvent事件的分发过程,及当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View,这个传递的过程就是分发过程
点击事件的分发过程有三个很重要的方法来共同完成
dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent
事件分发 结论
- 同一个事件序列是指从手指触摸屏幕的那一刻起,到手指离开屏幕的那一刻结束,在这个过程中所产生的一系列事件,这个事件序列以down事件开始,中间含有数量不定的move事件,最终以up结束
- 正常情况下,一个事件序列只能被一个View拦截且消耗
- 某个View一旦决定拦截,那么这一个事件序列都只能由它来处理
- 某个View一旦开始处理事件,如果它不消耗ACTION_DOWN事件(onTouchEvent返回false),那么同一事件序列中的其他事件都不会再交给它来处理,并且将事件重新交给它的父元素去处理,即父元的onTouchEvent会被调用
- ViewGroup 默认不拦截任何事件,Android源码中ViewGroup的onInterceptTouchEvent方法默认返回false
- View没有onInterceptTouchEvent,一旦有点击事件传递给它,那么它的onTouchEvent方法就会被调用
- View的onTouchEvent默认都会消耗事件,返回true,除非他是不可点击的,clickable和longClickable同时返回false,View的longClickable默认为false,clickable分情况,button的默认是true,textview默认是false
- View 的enable属性不影响onTouchEvent的默认返回值
- onClick会发生的前提是当前view是可点击的,并且收到了down和up事件
- 事件传递过程是由外向内的,即事件总是先传递给父元素,再由父元素分发给子View
网友评论