基于大牛maxleng的文章学习整理:http://blog.csdn.net/maxleng, 其中带有数字的是自己已经写的文章
由末端向上整理
onTouch执行 action等
onTouch与Click的关系 (属于系统手势判断)
onTouch与手势判断(属于自定义手势判断)
如何传递?Event从哪来的?
onTouch与onInterceput的关系
三者关系
---------------------------
一 、MotionEvent对象简单学习
1 位置信息:Android Touch事件rawX,rawY与x,y的区别
2. Touch action :Android Touch 单点触摸Action
二、基于源码析Touch Event传递机制
Android 处理Touch Event是先有系统获取到事件,之后传递给当前显示的Activity,之后再逐级向下派发直到传递给Touch正下方的View为止,当然此View也可以选择不处理Touch Event
1. Touch Event接收并传递给Activity -- Activity是在何处接收到Touch Event以及如何向下派发
2. VewGroup.dispatchTouchEvent源码简单分析 -- Activity把Touch Event向下派发,此处分析ViewGroup向下派发流程
3. 分析Touch 与Click的关系 -- 派发的具体的View,View会进行一些常用操作处理,例如点击事件。
------------------------规则
1. Touch事件是UI树形机构,由上向下传递。如果点击手机界面中的一个Button,其先传递给最外层的视图,经过层层向下传递给Button的父视图,其父视图再传递给Button处理。
2. 具体处理方法是View.onTouchEvent(MotionEvent event)
3. MotionEvent 中包含多种触屏操作,每种操作都用一个唯一的ID来标识,并且这些ID声明成为常量,最常见的就是ACTION_DOWN, ACTION_MOVE, ACTION_UP, ACTION_CANCEL四种动作。如果点击屏幕后慢慢移动,会执行的操作是,仅执行一次ACTION_DOWN, 移动过程中执行多次ACTION_MOVE, 抬起手指执行ACTION_UP。
4. 在1中提到Touch事件是从上向下传递的,在3中又提到触屏又有多种操作,这些操作是如何传递给需要具体操作的View的? 答案是每次操作都是从UI树形结构的上向下传递,例如ACTION_DOWN, ACTION_MOVE, ACTION_MOVE, ACTION_MOVE, ACTION_UP,一次触屏动作包含5个具体的操作,相当于UI树由上向下传递5次,第一个操作ACTION_DOWN操作并处理完成之后,再传递第二个操作ACTION_MOVE依此类推,直到执行完5此传递为止。
5. 具体是如何传递的? 涉及两方面,其一是UI树形结构决定了Touch传递的上下结构,其二是三个方法,包括负责分发Touch事件的View.dispatchTouchEvent, 处理拦截Touch事件ViewGroup.onInterceptTouchEvent, 视图针对触屏事件具体处理View.onTouchEvent,这三个方法决定了传递的具体流程。
6. 事件消耗,事件处理 - 指ACTION_DOWN, ACTION_MOVE, ACTION_UP, ACTION_CANCEL任一操作,只可能有两种情况。一 某一视图处理,可以叫做这个视图消耗了此次事件或者这个事件由此视图处理了,其他视图不再处理。 二 没有任何视图处理此事件。
7. Event.getX() 与 Event.getY() 向上移动,向下移动偏移值,正或负