android事件分发机制一

  一   当button被点击时 会调用 dispatchTouchEvent方法:

 

  1. public boolean dispatchTouchEvent(MotionEvent event) {  
  2.     if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED &&  
  3.             mOnTouchListener.onTouch(this, event)) {  
  4.         return true;  
  5.     }  
  6.     return onTouchEvent(event);  

 

     1.当 mOnTouchListener = null时:

                      也就是用户并没有给button注册 OnTouchListener 的时候 dispatchTouchEvent  

                               return onTouchEvent(event);

 

     2.当  mOnTouchListener != bull , 但是  (mViewFlags & ENABLED_MASK) != ENABLED (此控件是否enable

                              return onTouchEvent(event);

     3.当  mOnTouchListener != bull ,  但是  (mViewFlags & ENABLED_MASK) == ENABLED (此控件是否enable)                       mOnTouchListener.onTouch(this, event) 

             1.如果mOnTouchListener实现接口中返回false:

                             return onTouchEvent(event);(把事件分发给touchevent)

             2,如果mOnTouchListener实现接口中返回true:

                             return  true;   dispatchTouchEvent  一次结束 不再把event分发给ontouchevent 返回true 表示对用户一次动作的监听 结束  直至dispatchTouchEvent 返回false 跳出 dispatchTouchEvent 的 循环监听.

                               

 

 

  解读: 从这里可以知道,  当我们给控件注册了OnTouchListener 并且 控件是enable的状态 这时 代码便会执行我们在接口中实现的事件注意  boolean onTouch 返回的是bool类型 并且是开放给程序员  当我们手动返回时true的时候   dispatchTouchEvent 监听事件一次结束;但是当我们手动返回false时,return onTouchEvent(event);

 

 

 

   表现:  1.当我们没有注册OnTouchListener监听 或者 控件不是enable的状态,控件点击直接  return onTouchEvent(event);直接将事件分发给onTouchEvent(单击事件,长按事件等) 2.当我们注册了OnTouchListener监听 并且控件是enable状态 控件先会去执行OnTouchListener 中我们在接口中实现的具体处理方法  然后 当  我们onTouch 返回 false 时   dispatchTouchEvent 又把事件分发给onTouchEvent(这时如果我们设置了onclicklistener事件就会去执行);但是当我们 onTouch返回 true时, 即时 用户设置了onclicklistener 也不会去执行 因为dispatchTouchEvent直接返回了true(一次dispatchTouchEvent事件结束);

   

   

       

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兔爷不爱我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值