zoukankan      html  css  js  c++  java
  • 事件分发机制学习

    0x01 事件分发机制中三个重要的函数

     View事件机制有哪几个重要函数?dispatchTouchEvent(),onInterceptTouchEvent(),onTouchEvent()

     流程:触摸事件发生后,如果事件的坐标处于ViewGroup的管辖范围,那么首先调用ViewGroup的dispatchTouchEvent方法,然后其内部调用onInterceptTouchEvent()方法来判断是否拦截该触摸事件,若拦截该事件则调用ViewGroup的onTouchEvent()方法,否则的话,交给其子View的disPatchEvent()处理。

       

    0x02 事件分发的优先级

     同时重写View中的onTouchEvent,设置View的onTouchListener与onClickListener

     首先调用onTouchListener,若返回值为false调用onTouchEvent(返回值为false表示不消耗该事件,再去调用onClick(再onTouchEvent调用父类super.onTouchEvent(event)实现)注意:这里为什么不能直接在onTouchEvent中处理onClick?点击是什么概念?他是down与up的都在同一区域的结合,因此onTouchEvent无法直接判断。

     总结:优先级顺序:onTouchListener>onTouchEvent>onClick

    0x03 事件回传过程

      

    • 如果View只消耗down事件,而不消耗其他事件,那么其他事件不会回传给ViewGroup,而是默默的消逝掉。我们知道,一旦消耗down时间,接下来的该系列所有的事件都会交给这个View,因此,如果不处理down以外的事件,这些事件就会被“遗弃”。
    • 如果ViewGroup决定拦截,那么这个系列事件都只能由它处理,并且onInterceptTouchEvent不会再被调用。
    • 某个View,在onTouchEvent中,如果针对最开始的down事件都返回false,那么接下来的事件系列都不会交给这个View
    • ViewGroup默认不拦截事件,即onInterceptTouchEvent默认返回false
    • ViewonTouchEvent默认返回false,即不消耗事件。
    • View没有onInterceptTouchEvent方法。

      参考自:http://blog.csdn.net/huachao1001/article/details/51766225

                 http://www.jianshu.com/p/e99b5e8bd67b

  • 相关阅读:
    List<T>的使用
    onclientclick和onclick区别
    IOS学习资料
    DataTable排序的一般方法
    jquery特效
    交叉表、行列转换和交叉查询经典
    sql截取查询
    DelPhi学习网站
    EasyDarwin开源云平台接入海康威视EasyCamera摄像机之快照获取与上传
    EasyDarwin开源云平台接入海康威视EasyCamera摄像机之快照获取与上传
  • 原文地址:https://www.cnblogs.com/lmf-techniques/p/6424516.html
Copyright © 2011-2022 走看看