作家
登录

一篇文章彻底搞懂Android事件分发机制

作者: 来源: 2017-07-21 09:11:30 阅读 我要评论

       }   
  •    
  •        //如不雅没有拦截ACTION_MOVE, ACTION_DOWN的话,直接将Touch事宜派发给target   
  •        return target.dispatchTouchEvent(ev);   
  •    }  
  • 1、dispatchTouchEvent感化:决定事宜是否由onInterceptTouchEvent来拦截处理。

    返回super.dispatchTouchEvent时,由onInterceptTouchEvent来决定事宜的流向

    返回false时,会持续分发事宜,本身内部只处理了ACTION_DOWN

    返回true时,不会持续分发事宜,本身内部处理了所有事宜(ACTION_DOWN,ACTION_MOVE,ACTION_UP)

    返回true时,拦截后交给本身的onTouchEvent处理

    返回false时,拦截后交给子View来处理

    3、onTouchEvent感化:事宜最终达到这个办法

    (1)查看是否给button设置了OnTouchListener()事宜;

    返回true时,内部处理所有的事宜,换句话说,后续事宜将持续传递给该view的onTouchEvent()处理

    返回false时,事宜会向上传递,由onToucEvent来接收,如不雅最膳绫擎View中的onTouchEvent也返回false的话,那么事宜就会消掉


    总结

    • 如不雅ViewGroup找到了可以或许处理该事宜的View,则直接交给子View处理,本身的onTouchEvent不会被触发;
    • 可以经由过程复写onInterceptTouchEvent(ev)办法,拦截子View的事宜(即return true),把事宜交给本身处理,则会履行本身对应的onTouchEvent办法。
    • 子View可以经由过程调用getParent().requestDisallowInterceptTouchEvent(true); 阻拦ViewGroup对其MOVE或者UP事宜进行拦截;
    • 一个点击事宜产生后,它的传递过程如下:
    • Activity->Window->View。顶级View接收到事宜之后,就会按响应规矩去分发事宜。如不雅一个View的onTouchEvent办法返回false,那么将会交给父容器的onTouchEvent办法进行处理,逐级往上,如不雅所有的View都不处理该事宜,则交由Activity的onTouchEvent进行处理。
    • 如不雅某一个View开端处理事宜,如不雅他不消费ACTION_DOWN事宜(也就是onTouchEvent返回false),则同一事宜序列比如接下来进行ACTION_MOVE,则不会再交给该View处理。
    • ViewGroup默认不拦截任何事宜。
    • 诸如TextView、ImageView这些不作为容器的View,一旦接收到事宜,就调用onTouchEvent办法,它们本身没有onInterceptTouchEvent办法。正常情况下,它们都邑消费事宜(返回true),除非它们是弗成点击的(clickable和longClickable都为false),那么就会交由父容器的onTouchEvent处理。
    • 点击事宜分发过程如下 dispatchTouchEvent—->OnTouchListener的onTouch办法—->onTouchEvent-->OnClickListener的onClick办法。也就是说,我们日常平凡调用的setOnClickListener,优先级是最低的,所以,onTouchEvent或OnTouchListener的onTouch办法如不雅返回true,则不响应onClick办法. 

    【编辑推荐】

    1. Android APK反编译就这么简单详解(图文详解)
    2. Android Webview应用和碰到过的坑总结
    3. 谷歌官方Android应用架构库——LiveData
    4. 2017年实用于Android & iOS的最佳开源竽暌功用法度榜样
    5. AgentWeb是基于Android WebView一个功能完美小型浏览器库
    【义务编辑:枯木 TEL:(010)68476606】

      推荐阅读

      AgentWeb是基于Android WebView一个功能完善小型浏览器库

    【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路! Android 端AgentWeb 介绍AgentWeb是一个高度封装的 Android WebView ,简单易用 , 带有进度条 、 支撑文>>>详细阅读


    本文标题:一篇文章彻底搞懂Android事件分发机制

    地址:http://www.17bianji.com/lsqh/36325.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)