目前网上对ontouch事件传递机制的文章很多,但没有全面的说明,也缺少一目了然的图解,因此本文将用图形的方式来解释。
在android中控件分2类,一类是控件中还可以包含其他子控件,这类控件继承了viewgroup,如:Listview,gallery,gridview,这类控件事件会传递 ,另外一类不能包含子控件,如textview,这类控件事件不会传递。
Touch的状态分为4种, ACTION_DOWN, ACTION_MOVE (表示为移动手势),ACTION_UP(表示为离开屏幕),ACTION_CANCEL(表示取消手势,不会由用户产生,而是由程序产生的)
ViewGroup类的控件有3个重要方法:
1. dispatchTouchEvent:用于分发TouchEvent, TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ,然后由 dispatchTouchEvent 方法进行分发,如果dispatchTouchEvent返回true ,则交给这个view的onTouchEvent处理,如果dispatchTouchEvent返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件。
2. onInterceptTouchEvent(),用于拦截touchEvent,改变事件的传递方向,它的返回值是一个布尔值,决定了Touch事件是否要向它包含的子View继续传递,这个方法是从父View向子View传递。
3. onTouchEvent():用于接收事件并处理,它的返回值也是一个布尔值,决定了事件及后续事件是否继续向上传递,这个方法是从子View向父View传递。
图解:
没有评论:
发表评论