概述
Android View体系是界面编程的核心,他的重要性不亚于Android四大组件,View体系涉及的知识点很多,比如,Android 坐标系、Android 视图坐标系、动画、绘制等等,而事件分发,则是其中比较重要的一环。了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件
什么是View事件分发机制
事件分发是:当发生了一个事件时,在屏幕上找到一个合适的控件来处理这个事件的过程。因为一个界面上控件呈倒树状结构,层层嵌套,发生一个事件后总要寻找一个合适来处理事件吧。这个过程就叫做事件分发的机制。
常见Touch事件
事件 |
描述 |
ACTION_DOWN |
手指 初次接触到屏幕 时触发 |
ACTION_MOVE |
手指 在屏幕上滑动 时触发,会会多次触发 |
ACTION_UP |
手指 离开屏幕 时触发 |
ACTION_CANCEL |
事件 被上层拦截 时触发 |
主要类与方法
Method |
View.java |
ViewGroup.java |
Activity.java |
dispatchTouchEvent |
yes |
yes |
yes |
onInterceptTouchEvent |
No |
yes |
no |
OnTouchEvent |
yes |
no |
yes |
dispatchTouchEvent(MotionEvent event): 事件分发,View ViewGrop Activity 均包含
onInterceptTouchEvent(MotionEvent ev): 事件拦截,该方法只有ViewGroup所拥有
onTouchEvent(MotionEvent event): 事件响应,View 与Activity均包含
View 上层事件传递分析
对流程进行分析之前需要先了解下Activity 的构成,如下图
这里主要关注下PhoneWindow