2013年6月25日星期二

Android ontouch事件传递机制图解

目前网上对ontouch事件传递机制的文章很多,但没有全面的说明,也缺少一目了然的图解,因此本文将用图形的方式来解释。
     在android中控件分2类,一类是控件中还可以包含其他子控件,这类控件继承了viewgroup,如:Listviewgallerygridview,这类控件事件会传递 ,另外一类不能包含子控件,如textview,这类控件事件不会传递
     Touch的状态分为4, ACTION_DOWN, ACTION_MOVE (表示为移动手势),ACTION_UP(表示为离开屏幕),ACTION_CANCEL(表示取消手势,不会由用户产生,而是由程序产生的)

ViewGroup类的控件有3个重要方法:
1.  dispatchTouchEvent:用于分发TouchEvent, TouchEvent最先到达最顶层 view  dispatchTouchEvent ,然后由  dispatchTouchEvent 方法进行分发,如果dispatchTouchEvent返回true ,则交给这个viewonTouchEvent处理,如果dispatchTouchEvent返回 false ,则交给这个 view  interceptTouchEvent 方法来决定是否要拦截这个事件
2.  onInterceptTouchEvent(),用于拦截touchEvent,改变事件的传递方向,它的返回值是一个布尔值,决定了Touch事件是否要向它包含的子View继续传递,这个方法是从父View向子View传递。
3.  onTouchEvent():用于接收事件并处理,它的返回值也是一个布尔值,决定了事件及后续事件是否继续向上传递,这个方法是从子View向父View传递

图解:
alt

没有评论:

发表评论