您的位置:首页 > 移动开发 > Android开发

Android touch事件处理

2016-03-23 00:00 232 查看
看了源码,再看这篇文章 : 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

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

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

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

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

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

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

ListView设置OnTouchListener时,需要看情况设置返回true或者false,从而屏蔽掉ListView重实现的的onTouchEvent()。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: