Touch事件理解

来源:互联网 发布:天心软件集团 编辑:程序博客网 时间:2024/06/06 17:15

在自定义控件中,也需要对于Touch事件的传递要有一定的理解,所以就去看了看这部分的内容

  dispatchTouchEvent是一个入口

   一个完整的Touch事件是从Down->(Move)->Up,

 当发生了Touch事件中的Down的时候

 Touch事件从Activity中的dispatchTouchEvent向下传递,传递到当前View/ViewGroup.

   如果当前View 的dispatchTouchEvent返回为True的时候,那么当前View的dispatchTouchEvent会自己消费掉,同时停止向下传递

   如果当前View 的dispatchTouchEvent返回为false的时候,那么当前View就会将Touch事件返回给上一层的ViewGroup/Activity中的

    OnTouchEvent()

  (下面返回默认的情况就是有可能会向下分发的情况,以上均不可能,都死在了dispatchTouchEvent或者返回上一层)

   如果当前View的dispatchTouchEvent返回为默认的super.dispatchTouchEvent()的时候,那么就会将Touch事件分发给当前View的

onIntercepterTouchEvent方法,

   如果当前View的onIntercepterTouchEvent()方法返回true,那么将会对该Touch事件进行拦截,会响应当前View的  OnTouchEvent()  

   如果当前View的onIntercepterTouchEvent() 方法返回位false,那么就会将该Touch事件向下一级的View的dispatchTouchEvent()分发(终于分发了.....也就是执行了上一步的一样操作接收到了分发)

   如果当前View的onIntercepterTouchEvent()返回为默认的super.onIntercepterTouchEvent,那么将会对该Touch事件进行拦截,会响应当前View的  OnTouchEvent()  方法


而对于onTouchEvent()的调用(注意是调用),主要总结为,

1、在dispatchTouchEvent返回为false,才有可能返回上一层去触发onTouchEvent的响应,

2、在dispatchTouchEvent返回默认的时候,分发给自己的onIntercepterTouchEvent()方法,而onIntercepterTouchEvent方法返回为true的时候,将Touch事件拦截并交于onTouchEvent,而onIntercepterTouchEvent为默认时候,的同理亦是如此

3、这条最重要,以上onTouchEvent()都会响应,那么响应之后,

      如果onTouchEvent返回为true的时候,那么onTouchEvent就自己消费掉该Touch事件

      如果onTouchEvent返回为false的时候,那么onTouchEvent就会将该Touch事件传递给上一层的onTouchEvent().如果,上一层的View同样返回位false,那么该次事件将销毁掉,并且无法接受下次事件

      如果onTouchEvent返回为默认的情况下,同false


如有错误,欢迎大家指正,共同学习~,进步~

0 0
原创粉丝点击