现在的位置: 首页 > 综合 > 正文

Android Touch系统学习整理

2014年11月26日 ⁄ 综合 ⁄ 共 2077字 ⁄ 字号 评论关闭

基于大牛maxleng的文章学习整理:http://blog.csdn.net/maxleng, 其中带有数字的是自己已经写的文章

由末端向上整理

onTouch执行 action等

onTouch与Click的关系 (属于系统手势判断)

onTouch与手势判断(属于自定义手势判断)

如何传递?Event从哪来的?

onTouch与onInterceput的关系

三者关系

---------------------------

    Android Touch相关的一些简单规则

一 、MotionEvent对象简单学习

1 位置信息:Android Touch事件rawX,rawY与x,y的区别

2. Touch action Android Touch 单点触摸Action

3. 修改MotionEvent的值

 


二、基于源码析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 Event?
2. Service端如何处理?
3. 为什么事件要每次派发一个ACTION操作?
4. 为什么要以树形结构又上向下派发?
5. Touch Event 使用生产者消费者模式,简单实现一个?
6. Touch Event传递简单实现一个?
7. onTouchEvent, onInterceptTouchEvent, dispatchTouchEvent 每个方法具体含义?如何处理派发流程?
疑问:
1. 触摸屏幕材质有何区别?
2. 硬件如何传递信息给驱动?
3. 驱动如何传递信息给Linux?
4. Android 如何从Linux获取此信息?
5. Android内部如何处理的?
以上疑问参考资料:
资料整理:

------------------------规则

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() 向上移动,向下移动偏移值,正或负

抱歉!评论已关闭.