对Android之事件分发机制的理解
事件分发机制 中的三种方法dispatchTouchEvent() onInterceptTouchEvent() onTouchEvent()
dispatchTouchEvent(),事件的分发方法,一般由父布局调用,将点击事件传递到子View。返回true,代表事件被消费;返回false,表示事件未被消费,事件会继续传递下去。
onInterceptTouchEvent(),是否拦截点击事件,如果返回true,表示拦截事件,调用自身onTouchEvent()
处理点击事件;如果返回false,不拦截点击事件,则将点击事件传递到子View。
onTouchEvent(),处理点击事件的具体方法
顺序传递activity--viewgroup--view
点击activity调用activity.dispatchTouchEvent()方法,①返回true,代表事件被消费,不会往下传递,事件分发结束
②返回false表示事件未被消费,事件会继续传递下去;调用viewgroup.dispatchTouchEvent()方法,然后会调用viewgroup.oninterceptTouchEvent()方法,返回true,表示拦截事件,调用viewgroup自身onTouchEvent()处理点击事件;如果返回false,不拦截点击事件,则将点击事件传递到子View。调用子view.dispatchTouchEvent()方法
注意:
①View类和Activity类中仅仅有dispatchTouchEvent()和onTouchEvent()两个方法,并没有onInterceptTouchEvent()方法;上述三个方法在ViewGroup中都存在
②事件虽然是从Activity向底层View传递,在不考虑ViewGroup拦截事件的情况下,最先处理事件(onTouchEvent)的是底层View,如果事件未被底层View消费,事件将会回传给上层的ViewGroup处理(onTouchEvent),若所有的ViewGroup都未消费事件,事件最终会回传到Activity由它做最后的处理(onTouchEvent)。
③事件在传递过程中,如果被ViewGroup拦截(onInterceptTouchEvent),该ViewGroup会优先处理该事件。
④底层的View或者ViewGroup如果将事件消费了,上层的ViewGroup的OnTouchListener、OnTouchEvetn,OnClickListener都不会被调用。
⑤在同一个View或者ViewGroup的事件处理中,OnTouchListener优先级最高,OnTouchEvent其次,OnClickListener最低。
更多相关文章
- 获取Android所有的应用和包名 点击跳转已安装应用
- 【Android】ImageButton的记录
- android点击事件
- 三种解析xml的方式
- android常用组件之RatingBar
- android studio怎么在真机中调试程序?
- android 按键处理流程
- android studio 添加按钮事件的三种方法
- RadioGroup实现点击的RadioButton项变色