什么是触摸事件?
- 触摸事件就是捕获触摸屏幕后产生的事件。Android为触摸事件封装了一个类:
MotionEvent
。MotionEvent
类封装了很多东西,比如触摸点的坐标:event.getX()
、点击的事件类型:MotionEvent.ACTION_DOWN
,MotionEvent.ACTION_UP
,MotionEvent.ACTION_MOVE
。
事件传递机制
布局这是一个简单的布局:最外层是一个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);
方法。
当父容器ViewGroup的onInterceptTouchEvent(MotionEvent ev)
方法返回false的时候,父容器都不会拦截事件,将会继续分发事件给它的子ViewGroup或者子View。当ViewGroup或者View的onTouchEvent(MotionEvent ev)
返回true,将不再进行事件处理的传递,也就是不再传递给上级。
事件传递就是这么简单的啦,但是要灵活运用却没那么简单。下一篇文章我们用这个原理做一些有趣的事。
网友评论