美文网首页
Android事件触发机制

Android事件触发机制

作者: 杨殿生 | 来源:发表于2020-05-12 14:25 被阅读0次

事件分发分捕获和执行两个阶段

事件传递,即捕获,就是执行dispatchTouchEvent()方法,再执行onInterceptTouchEvent()方法。
事件处理就是执行onTouchEvent()方法。

事件的返回值含义:
当事件在传递的过程中,返回值:True,拦截,不继续;False,不拦截,继续流程,传递给下一级。
当事件在处理的过程中,返回值:True,处理了,不用审核了;False,交给上一级处理。

对于ViewGroup,需要重写三个方法:

@Override
public boolean dispatchTouchEvent(MotionEvent event)
{
    Log.d(TAG, "ViewGroup dispatchTouchEvent" + event.getAction());
    return super.dispatchTouchEvent(event);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event)
{
    Log.d(TAG, "ViewGroup onInterceptTouchEvent" + event.getAction());
    return super.onInterceptTouchEvent(event);
}

@Override
public boolean onTouchEvent(MotionEvent event)
{
    Log.d(TAG, "ViewGroup onTouchEvent" + event.getAction());
    return super.onTouchEvent(event);
}

对于View,需要重写如下两个方法:

@Override
public boolean dispatchTouchEvent(MotionEvent event)
{
    Log.d(TAG, "View dispatchTouchEvent" + event.getAction());
    return super.dispatchTouchEvent(event);
}

@Override
public boolean onTouchEvent(MotionEvent event)
{
    Log.d(TAG, "View onTouchEvent" + event.getAction());
    return super.onTouchEvent(event);
}
  1. dispatchTouchEvent(...):
    作用:决定事件是否由onInterceptTouchEvent拦截处理;
    当返回super.dispatchTouchEvent(...)时,由onInterceptTouchEvent来决定事件的流向,onInterceptTouchEvent返回值为false时,继续向子View分发事件,本View只处理ACTION_DOWN事件。
    当onInterceptTouchEvent返回值为true时,不继续向子View分发事件,本View处理所有事件。

  2. onInterceptTouchEvent(...):
    作用:拦截事件,决定是否将事件传递给子View;
    当返回值为false时,事件继续传递给子View;
    当返回值为true时,事件交给onTouchEvent(...)处理,不再向子View传递。

  3. onTouchEvent(MotionEvent event):
    作用:事件最终到这个方法,由此方法处理事件;
    当返回值为false时,事件继续向上传递给其父View的onTouchEvent()方法,直到根View的,一直传递到根View时,返回值都是false,也就是说在事件传递过程中没有View的onTouchEvent()方法返回true,此次手势就会结束,此次事件就会被取消。
    当返回值为true时,此View处理所有事件,并且处理的事件不会再向上返回。也就是说在值为true时,此手势的所有事件都传递给此View的onTouchEvent()处理,包括ACTION_DOWN、ACTION_UP、ACTION_MOVE等事件。

参考
Android 事件响应原理
Android事件分发原理分析

相关文章

  • Android事件触发机制

    事件分发分捕获和执行两个阶段 事件传递,即捕获,就是执行dispatchTouchEvent()方法,再执行onI...

  • setOnClickListener 事件记录

    android中click事件触发机制 1、在XML直接指定click事件名称 2、Activity中定义OnCl...

  • Android 事件分发机制源码

    Android 事件分发机制源码 Android,事件机制,Android事件分发机制源码 Android Tou...

  • android事件分发机制

    android事件分发机制:我们在屏幕上进行一系列的点击/滑动/抬起等动作时所触发的事件,都是在与android的...

  • Android的ANR原理分析

    大概 Android的ANR主要有两种方式:1. 通过handler的延迟机制触发ANR2. Input事件触发A...

  • Android的ANR原理分析

    Android的ANR主要有两种方式:1、通过handler的延迟机制触发ANR2、Input事件触发ANR` S...

  • 浏览器相关知识点小结

    事件机制 事件触发的三个阶段:window 往事件触发处传播,遇到注册的捕获事件会触发传播到事件触发处时触发注册的...

  • 2020-06-10 浏览器

    事件机制 1、事件触发三阶段 ● window 往事件触发处传播,遇到注册的捕获事件会触发 ● 传播到事件触发处触...

  • 前端面试题(四)浏览器篇

    事件机制 事件触发三阶段 事件触发有三个阶段 window 往事件触发处传播,遇到注册的捕获事件会触发 传播到事件...

  • 一文掌握前端面试浏览器相关知识点

    事件机制 事件触发三阶段 事件触发有三个阶段 window 往事件触发处传播,遇到注册的捕获事件会触发 传播到事件...

网友评论

      本文标题:Android事件触发机制

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