触摸事件的总结(

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了触摸事件的总结(相关的知识,希望对你有一定的参考价值。

/**总结:
1.
1.1
dispatchTouchEvent事件分发这个每个都有(无论是View 还是viewgrope,以及Activity)
这个是用来处理是否分发事件(这个总是会被执行的前提是父控件没有拦截或者进行分发了)
如果这里就取消事件分发则无法响应本次触摸(以后的 onInterceptTouchEvent或者 onTouchEvent都不会执行包括父控件的)
1.2
onTouchEvent事件分发这个每个都有(无论是View 还是viewgrope,以及Activity)
用来处理自己的触摸事件,如果自己返回true则不再给下面的子view分发触摸事件
1.3
onInterceptTouchEvent这个是是否拦截事件(只有ViewGrope才有)
拦截触摸事件的,如果dispatchTouchEvent是同意的则可以通过这个来拦截不再给子view分发
2.
如果dispatchTouchEvent为false也就是可以往下给子view分发事件,
但是onInterceptTouchEvent拦截true的时候讲不会再给子view了,
包括onTouchEvent处理了事件任意一个为也就是,
3.dispatchTouchEvent true连自己的响应都不会有,也没有自己的拦截
4.
super.dispatchTouchEvent(ev);并不会和false相等,
如果是flase,子view也不会得到事件分发的处理(如果自己不想拦截处理最好用super,毕竟你不想处理父类还有要处理的东西呢)

以上是个人总结如果有问题或者错误希望大家指导,以下是测试部分的响应日志:

//标准:Activity->LinearLayout->TextView (布局就是LinearLayout里面一个TextView)
dispatchTouchEvent:Activity 事件分发
dispatchTouchEvent:LinearLayout 事件分发
onInterceptTouchEvent:LinearLayout 拦截
dispatchTouchEvent:TextView 事件分发
onTouchEvent: TextView事件响应
onTouchEvent: LinearLayout事件响应
onTouchEvent: Activity事件响应
dispatchTouchEvent:Activity 事件分发
onTouchEvent: Activity事件响应
*/
/* 拦截后dispatchTouchEvent:Activity 事件分发
dispatchTouchEvent:LinearLayout 事件分发
onInterceptTouchEvent:LinearLayout 拦截
onTouchEvent: LinearLayout事件响应
onTouchEvent: Activity事件响应
dispatchTouchEvent:Activity 事件分发
onTouchEvent: Activity事件响应*/


/** dispatchTouchEvent true后(不在进行事件分发)
dispatchTouchEvent:Activity 事件分发
dispatchTouchEvent:LinearLayout 事件分发
dispatchTouchEvent:Activity 事件分发
dispatchTouchEvent:LinearLayout 事件分发
dispatchTouchEvent:Activity 事件分发
dispatchTouchEvent:LinearLayout 事件分发
*/
/**
* Touch true后
dispatchTouchEvent:Activity 事件分发
dispatchTouchEvent:LinearLayout 事件分发
onInterceptTouchEvent:LinearLayout 拦截
dispatchTouchEvent:TextView 事件分发
onTouchEvent: TextView事件响应
onTouchEvent: LinearLayout事件响应
dispatchTouchEvent:Activity 事件分发
dispatchTouchEvent:LinearLayout 事件分发
onTouchEvent: LinearLayout事件响应
dispatchTouchEvent:Activity 事件分发
dispatchTouchEvent:LinearLayout 事件分发
onTouchEvent: LinearLayout事件响应
*/
/*onInterceptTouchEvent 和Touch为true
dispatchTouchEvent:Activity 事件分发
dispatchTouchEvent:LinearLayout 事件分发
onInterceptTouchEvent:LinearLayout 拦截
onTouchEvent: LinearLayout事件响应
dispatchTouchEvent:Activity 事件分发
dispatchTouchEvent:LinearLayout 事件分发
onTouchEvent: LinearLayout事件响应
dispatchTouchEvent:Activity 事件分发
dispatchTouchEvent:LinearLayout 事件分发
onTouchEvent: LinearLayout事件响应*/



















































































以上是关于触摸事件的总结(的主要内容,如果未能解决你的问题,请参考以下文章

Android触摸事件分发机制完全解析《一》

Android触摸事件分发

iOS学习笔记--触摸事件

Vue 移动端的长按与触摸事件

事件的产生,传递以及响应链

iOS触摸事件处理详解