事件分发机制 中的三种方法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最低。

 

 

更多相关文章

  1. 获取Android所有的应用和包名 点击跳转已安装应用
  2. 【Android】ImageButton的记录
  3. android点击事件
  4. 三种解析xml的方式
  5. android常用组件之RatingBar
  6. android studio怎么在真机中调试程序?
  7. android 按键处理流程
  8. android studio 添加按钮事件的三种方法
  9. RadioGroup实现点击的RadioButton项变色

随机推荐

  1. Android(安卓)TextView加载HTMl图文之添
  2. android Device Admin以及hasSystemFeatu
  3. 【Android】 WiFi 无线调试
  4. Mybatis中的连接池&&事务控制
  5. android 日常迭代与维护总结一
  6. Android清单文件中相关属性含义(Provider)
  7. 如何编写优雅的异步代码 — CompletableF
  8. Android使用SharedPreferences保存数组
  9. 用Android(安卓)Studio3.0新功能加快构建
  10. Android知识体系图