Activity、ViewGroup和View触摸事件分发机制总结
View触摸屏事件传递机制
整个View的事件转发流程是:
View.dispatchEvent->View.setOnTouchListener->View.onTouchEvent
View事件分发机制图:
文章图片
View事件分发
1、View的触摸事件首先执行dispatchTouchEvent()方法。
2、其次在dispatchTouchEvent()方法中执行view.setOnTouchListener()方法的判断(onTouch()方法啦),如果OnTouchListener不为null且返回true,则表示事件被消费,onTouchEvent不会被执行,dispatchTouchEvent也返回true;否则之后执行onTouchEvent()方法,dispatchTouchEvent返回值与onTouchEvent返回一样。。
3、最后在onTouchEvent()的ACTION_UP分支执行onClick()事件
4、当dispatchTouchEvent在进行事件分发的时候,只有前一个action返回true,才会触发下一个action(也就是说dispatchTouchEvent返回true才会进行下一次action派发)。
ViewGroup触摸屏事件传递机制
1、Android事件派发先传递到最顶层的ViewGroup,再由ViewGroup递归传递给View(举个例子,比如国家下发文件通知,肯定是先发给总部,再由总部下发给员工,不可能先发给员工再发给总部)。如果传递给了子View,则ViewGroup的onTouchEvent不会被触发。
2、在ViewGroup中通过onInterceptTouchEvent对事件进行拦截,返回true代表不允许事件继续向子View传递。返回false代表不对事件拦截,默认为false。
3、子View将事件消费掉,ViewGroup中将无法接收任何事件。
4、子View可以调用getParent().requestdisallowInterceptTouchEvent()阻止父ViewGroup对其事件拦截。
Activity触摸屏事件传递机制
【Activity、ViewGroup和View触摸事件分发机制总结】1、首先会触发Activity的dispatchTouchEvent方法。
2、dispatchTouchEvent方法中如果是ACTION_DOWN的情况下会接着触发onUserInteraction方法。
3、接着在dispatchTouchEvent方法中会通过Activity的root View(id为content的FrameLayout),实质是ViewGroup,通过super.dispatchTouchEvent把touchevent派发给各个activity的子view,也就是我们再Activity.onCreat方法中setContentView时设置的view。
4、若Activity下面的子view拦截了touchevent事件(返回true)则Activity.onTouchEvent方法就不会执行。
推荐阅读
- android11发布会,秒级推送!Android 11正式发布(一加、小米等手机将陆续更新)
- IPO速递|德芯科技遭现场督导:证监会、交易所离职人员入股,分红超盈利|IPO速递
- javascript|vue实现HTML转PDF (已解决清晰、页边距、图片导出等问题)
- js事件冒泡|js中的事件绑定、事件冒泡、事件捕获和事件执行顺序(详细解读)
- 关于实习、就业我们是认真的|关于实习、就业我们是认真的 提升就业品味我们是玩命的】
- 聊一聊大学生实习三个最纠结的问题(钱少、活杂、为了啥)
- PC的未来(13)
- Boolan|Boolan C++标准库 第二周
- Android交互之-----activity与html互调数据
- 此去经年