Android事件传递

Posted winfredzen

tags:

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

android事件传递

内容来自:

事件分发、拦截、消费涉及到的方法

类型相关方法ActivityViewGroupView
事件分发dispatchTouchEvent
事件拦截onInterceptTouchEventXX
事件消费onTouchEvent

dispatchTouchEvent 方法

Pass the touch screen motion event down to the target view, or this view if it is the target.
将事件向下传递到目标view
返回值:True if the event was handled by the view, false otherwise.
true表示事件被view处理了,false则反之

onInterceptTouchEvent方法拦截所有的触摸屏幕的motion event。

onTouchEvent方法会处理motion event

从上表可看出ActivityView 都是没有事件拦截

事件分发流程

当发生触摸,先从Activity开始,然后向下传递到layout,然后到layout上的view

这样做的目的是找到第一个对touch感兴趣的对象。找到之后,任务就结束了。如果大家都不感兴趣,就会被丢弃

整个流程大概类似于,father得到了个apple,然后传递给大儿子,然后再传递给弟弟

如果弟弟对这个apple不感兴趣,他就把这个apple传递给哥哥。如果哥哥也不感兴趣,就再传递给father。

Manage touch events in a ViewGroup有这样的描述:

The onInterceptTouchEvent() method is called whenever a touch event is detected on the surface of a ViewGroup, including on the surface of its children. If onInterceptTouchEvent() returns true, the MotionEvent is intercepted, meaning it is not passed on to the child, but rather to the onTouchEvent() method of the parent.

如果 onInterceptTouchEvent() r返回true,则 MotionEvent被拦截,意味着它不会传递到child上,而是传递到父view的onTouchEvent()

以上是关于Android事件传递的主要内容,如果未能解决你的问题,请参考以下文章

Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 )

Android 事件分发事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 )

Android 事件传递机制进阶

Android事件传递

目前有哪只手机支持android L系统?

Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 五 )