zoukankan      html  css  js  c++  java
  • android MotionEvent

    getAction() 获取事件的类型,这是一个组合值,由pointer的index值和事件类型值组合而成的
    getActionMasked() 获取事件的类型,不具有其他信息

    参考:
    http://blog.csdn.net/zty19901005/article/details/50951213

    事件分发:public boolean dispatchTouchEvent(MotionEvent ev)

    当有监听到事件时,首先由Activity的捕获到,进入事件分发处理流程。无论是Activity还是View,如前文所说,事件分发自身也具有消费能力,

    如果事件分发返回true,表示改事件在本层不再进行分发且已经在事件分发自身中被消费了。至此,事件已经完结。如果你不想Activity中的任何控件具有任何的事件消费能力,

    最简答的方法可以重写此Activity的dispatchTouchEvent方法,直接返回true就ok。

    如果事件分发返回 false,表明事件在本层不再继续进行分发,并交由上层控件的onTouchEvent方法进行消费。

    当然了,如果本层控件已经是Activity,那么事件将被系统消费或处理。

    如果事件分发返回系统默认的 super.dispatchTouchEvent(ev),事件将分发给本层的事件拦截onInterceptTouchEvent 方法进行处理

    (如果本层控件是Activity,由于其没有事件拦截,因此将直接将事件传递到子View,并交给子View的事件分发进行处理)。

    事件拦截:public boolean onInterceptTouchEvent(MotionEvent ev)

    如果 onInterceptTouchEvent 返回 true,则表示将事件进行拦截,并将拦截到的事件交由本层控件 的 onTouchEvent 进行处理;

    如果返回结果是false;则表示不对事件进行拦截,事件得以成功分发到子View。并由子View的dispatchTouchEvent进行处理。

    如果返回super.onInterceptTouchEvent(ev),事件默认不会被拦截,交由子View的dispatchTouchEvent进行处理。

    事件响应:public boolean onTouchEvent(MotionEvent ev)

    如果onTouchEvent返回true,表示onTouchEvent处理完事件后消费了此次事件。此时事件终结,将不会进行后续的冒泡。

    如果onTouchEvent返回false,事件在onTouchEvent中处理后继续向上层View冒泡,且有上层View的onTouchEvent进行处理。

    如果返回super.onTouchEvent(ev),则默认处理的逻辑和返回false时相同。

    总结:从以上过程中可以看出,dispatchTouchEvent无论返回true还是false,事件都不再进行分发,

    只有当其返回super.dispatchTouchEvent(ev),才表明其具有向下层分发的愿望,

    但是是否能够分发成功,则需要经过事件拦截onInterceptTouchEvent的审核。事件是否具有冒泡特是由onTouchEvent的返回值决定的。

    参考:
    http://www.cnblogs.com/lwbqqyumidi/p/3500997.html

  • 相关阅读:
    Nginx——基本操作
    JavaWeb——关于RequestDispatcher的原理
    JavaWeb——XML转义符字
    JavaWeb——JSTL 核心标签库使用
    JavaWeb——jsp-config
    URL和URI区别
    Docker入门5------生产力工具docker-compose
    Docker入门4------Dockerfile
    Docker入门3------手动编辑自定义镜像
    Docker入门2------容器container常规操作
  • 原文地址:https://www.cnblogs.com/caoxinyu/p/10568574.html
Copyright © 2011-2022 走看看