美文网首页
Android事件拦截机制(一)

Android事件拦截机制(一)

作者: innovatorCL | 来源:发表于2017-08-21 21:37 被阅读82次

    什么是触摸事件?

    • 触摸事件就是捕获触摸屏幕后产生的事件。Android为触摸事件封装了一个类:MotionEventMotionEvent类封装了很多东西,比如触摸点的坐标: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);方法。

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

    事件传递流程

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

    相关文章

      网友评论

          本文标题:Android事件拦截机制(一)

          本文链接:https://www.haomeiwen.com/subject/tclyhxtx.html