Android touch事件处理

看了源码,再看这篇文章 : http://www.2cto.com/kf/201407/316510.html

http://www.open-open.com/lib/view/open1422428386548.html

Android事件分发机制完全解析,带你从源码的角度彻底理解(上) : http://blog.csdn.net/guolin_blog/article/details/9097463

Android事件机制之一:事件传递和消费:http://www.cnblogs.com/lwbqqyumidi/p/3500997.html

Android TouchEvent事件传递机制:http://blog.csdn.net/morgan_xww/article/details/9372285/

 Android双向滑动菜单完全解析,教你如何一分钟实现双向滑动特效:http://blog.csdn.net/guolin_blog/article/details/9671609


  1. 点击事件是先分配到Activiy的dispatchTouchEvent(),还是PhoneWindowManager下的内部类DecorView的dispatchTouchEvent()两者都会调用ViewGroupdispatchTouchEvent(),进行事件分配。

  2. ViewGroupdispatchTouchEvent()有两个重要的点:a.具有拦截的onInterceptTouchEvent(),当其返回true时,是不会向下分发点击事件了,而是走自己父类的即View的onTouchEvent()消费事件;b.当一个事件流程内(down->move->up)的前一个事件没有被分发处理,即下一层的ViewGroup或View的方法dispatchTouchEvent()返回了false,后一个事件dispatchTouchEvent()也就不会继续分发给返回false的ViewGroup或View了。

  3. ViewGroup重写了父类View的dispatchTouchEvent(),使其可以将事件先分发给它的子View(也有可能是ViewGroup),但没有重写onTouchEvent()。

  4. 一般自定义控件时,会设置OnTouchListener,其重写的方法onTouch()就会在View的dispatchTouch()里优先于onTouchEvent()调用,并且当onTouch()返回true时,onTouchEvent()就不会被调用了!!

  5. 控件设置OnClickListener,其重写方法onClick()会在onTouchEvent()的UP事件中处理,当重写了onTouch()并且返回了true,该方法便不会调用了

  6. dispatchTouchEvent()返回了false,即该层及该层以下(如果有的话)都没有能消费事件,事件会由该层的上一层去处理了,并且参照2的b;

  7. ListView设置OnTouchListener时,需要看情况设置返回true或者false,从而屏蔽掉ListView重实现的的onTouchEvent()。




转载于:https://my.oschina.net/u/2489528/blog/646101

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值