1.观点,什么是事宜的派发
事宜的派发大略来讲便是Activity将事宜派发给容器和控件,容器或控件将事宜进一步派发给其子容器和子控件,直到事宜终极派发到事宜发生的焦点控件上。
2.常用的事宜触摸方法

我想对付这些常用的事宜触摸方法大家都该当有一定的理解,或者熟习,那便是onTouchEvent()和dispatchTouchEvent(),OnInterceptTouchEvent(),看到方法后,相信你很快就会说,对我用过,但是详细的意思没有搞清楚,看别人这么说的,别人这么用的,我就随着这么用的,用之前,对付这些方法我们一定要搞清其浸染,这样才能在做起来对症下药。现在我们就来先容一下这三种方法的大概用法和浸染。
①、Boolean onTouchEvent()
浸染:处理本次触摸事宜。
阐明:如果某个控件或容器消费了touch事宜,则与该touch事宜干系的后续touch事宜者会派发给该控件或容器进行处理。
返回值:该方法的返回值机理与键盘相应事宜的相同,同样是当已经完全地处理了该事宜且不肯望其他回调方法再次处理时返回true,否则返回false。
一样平常情形下以下三种情形的事宜全部由onTouchEvent方法处理,只是三种情形中的动作值不同。
屏幕被按下:当屏幕被按下时,会自动调用该方法来处理事宜,此时MotionEvent.getAction()的值为MotionEvent.ACTION_DOWN,如果在运用程序中须要处理屏幕被按下的事宜,只需重新该回调方法,然后在方法中进行动作的判断即可。
屏幕被抬起:当触控笔离开屏幕时触发的事宜,该事宜同样须要onTouchEvent方法来捕捉,然后在方法中进行动作判断。当MotionEvent.getAction()的值为MotionEvent.ACTION_UP时,表示是屏幕被抬起的事宜。
在屏幕中拖动:该方法还卖力处理触控笔在屏幕上滑动的事宜,同样是调用MotionEvent.getAction()方法来判断动作值是否为MotionEvent.ACTION_MOVE再进行处理。
②、Boolean OnInterceptTouchEvent()
浸染:是否拦截触摸事宜,true表示拦截,faIse表示不拦截。
阐明:onInterceptTouchEvent这个事宜是从父控件开始往子控件传的,直到有拦截或者到没有这个事宜的view,然后就往回从子到父控件,(类似于预处理,当然也可以不处理)并改变事宜的通报方向,也便是决定是否许可Touch事宜连续向下(子控件)通报,一但返回True(代表事宜在当前的viewGroup中会被处理),则向下通报之路被截断(所有子控件将没有机会参与Touch事宜),同时把事宜通报给当前的控件的onTouchEvent()处理;返回false,则把事宜交给子控件的onInterceptTouchEvent()。
③、void dispatchTouchEvent()
浸染:将触摸事宜向下层的ViewGroup或View派发。
阐明:当TouchEvent发生时,首先Activity将TouchEvent通报给最顶层的View, TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ,然后由 dispatchTouchEvent 方法进行分发,如果dispatchTouchEvent返回true ,则交给这个view的onTouchEvent处理,如果dispatchTouchEvent返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事宜,如果 interceptTouchEvent 返回 true ,也便是拦截掉了,则交给它的 onTouchEvent 来处理,如果 interceptTouchEvent 返回 false ,那么就通报给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事宜的分发。如果事宜通报到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事宜会从这个 view 往上通报,都是 onTouchEvent 来吸收。而如果通报到最上面的 onTouchEvent 也返回 false 的话,这个事宜就会“消逝”,而且吸收不到下一次事宜。
3.我们常用的ACTION常量
public static final int ACTION_DOWN=0
浸染:表示按下的状态。
public static final int ACTION_ UP=1
浸染:表示抬起的状态。
public static final int ACTION_MOVE=2
浸染:表示移动的状态。
4.特殊把稳
ViewGroup里的onInterceptTouchEvent默认值是false这样才能把事宜传给View里的onTouchEvent.
ViewGroup里的onTouchEvent默认值是false。
View里的onTouchEvent返回默认值是true.这样才能实行多次touch事宜
更多内容和资讯或者问题,更多干货分享,尽在我的个人微信公众年夜众号,微信名:非著名程序员,微旗子暗记:smart_android(←长按复制)。个人微旗子暗记:loonggg 微博:涩郎