大家都知道,onInterceptTouchEvent是做touch事件监听拦截的。在此之前,必须先理清点击事件的顺序。
从上面可以看到从拦截器onInterceptTouchEvent()执行后,对于onTouchEvent事件的传递时采用向上传递,这里有个设计模式叫什么来着,忘了。
2.现在对onTouchEvent()的返回值简单讲解下:
2.1
如果返回值为FALSE,则只执行ACTION_DOWN ,如果返回至为TRUE,则执行一连串事件的ACTION_DOWN,ACTION_MOVE,ACTION_UP等。
具体对于viewGroup(也就是layout)与view(如btn)的onTouchEvent()默认返回值是不同的。
viewGroup默认返回FALSE , View默认返回TRUE。
也就是viewGroup默认会执行ACTION_DOWN ,而View默认则会调用ACTION_DOWN ,ACTION_MOVE,ACTION_UP等。
2.2
现在说说View的boolean值的额外功能:
当View为false时,通知父容器它还没解决完,需要父容器去继续操作,因此会调用包裹layout的onTouchEvent()
当为true时,则不向上传递信息。
3.看完了onTouchEvent后,对onInterceptTouchEvent来说就显而易见了,因为事件在点击的时候先执行的是onInterceptTouchEvent。所有他可以对刚要被点击的对象做拦截。
默认为False,当返回值为TRUE时,只调用其容器的onTouchEvent()。当为FALSE时,则根据具体view
的返回值决定是否向上传播。
-------------------------------------------接下来谈谈dispatchTouchEvent()。
我们平时所说的ACTION_DOWN ,ACTION_UP等都为一个事件。他们都会自上而下拦截,并通过消息向上传递。
当我们点击一个控件,ACTION_DOWN会在以上方法执行一次,紧接着ACTION_MOVE会执行一次或者多次等。
ACTION_UP也会在这几个方法执行一次。
4.对于View和Viewgroup,他们都会执行此方法。当一个行为被触发时,该ACTIVITY会触发最外的容器的
dispatchTouchEvent()。dispatchTouchEvent的返回值如果为TRUE,则,直接调用触发View的onTouchEvent,如果为FALSE,则会调用其 onInterceptTouchEvent并决定是否进行拦截。