Android事件拦截机制(一)

什么是触摸事件?

  • 触摸事件就是捕获触摸屏幕后产生的事件。Android为触摸事件封装了一个类:MotionEventMotionEvent类封装了很多东西,比如触摸点的坐标:event.getX()、点击的事件类型:MotionEvent.ACTION_DOWN,MotionEvent.ACTION_UP,MotionEvent.ACTION_MOVE

事件传递机制

Android事件拦截机制(一)_第1张图片
布局

这是一个简单的布局:最外层是一个ViewGroupA,里面包含一个ViewGroupB,然后B里面包含一个子View MyView

我们先看事件传递及处理的3个方法:
1、public boolean dispatchTouchEvent(MotionEvent ev); 事件分发

2、public boolean onInterceptTouchEvent(MotionEvent ev); 事件拦截方法

3、public boolean onTouchEvent(MotionEvent ev); 处理触摸事件。

其中View是没有事件拦截的方法。

传递机制

事件传递顺序:触摸事件 ----> ViewGroupA---->ViewGroupB---->MyView
事件传递的时候,先执行public boolean dispatchTouchEvent(MotionEvent ev);方法,再执行public boolean onInterceptTouchEvent(MotionEvent ev);方法。如果父容器ViewGroup没有拦截,触摸事件将从最外面的根布局传递到最里面的子View

事件处理的顺序是:MyVIew---->ViewGroupB---->ViewGroupA事件处理(消费)执行public boolean onTouchEvent(MotionEvent ev);方法。

当父容器ViewGrouponInterceptTouchEvent(MotionEvent ev)方法返回false的时候,父容器都不会拦截事件,将会继续分发事件给它的子ViewGroup或者子View。当ViewGroup或者View的onTouchEvent(MotionEvent ev)返回true,将不再进行事件处理的传递,也就是不再传递给上级。

Android事件拦截机制(一)_第2张图片
事件传递流程

事件传递就是这么简单的啦,但是要灵活运用却没那么简单。下一篇文章我们用这个原理做一些有趣的事。

你可能感兴趣的:(Android事件拦截机制(一))