zoukankan      html  css  js  c++  java
  • 事件分发测试结果与理解总结

         *   总结:
         *     事件分发其实调用机制应该是这样的:(这里说的仅仅是系统的,其他的可能中途修改不一定是这样)
         *     总: dispatchTouchEvent会在在super.dispatchTouchEvent中最终会调用onTouchEvent, 以及onInterceptTouchEvent方法
         *     1.在调用onTouchEvent作为本事件是否被消耗了,如果自己没消耗会由父来消耗,如果使用了
         *     requestDisallowInterceptTouchEvent阻止父消耗,则会由Activity消耗以此结束
         *     2.在调用onInterceptTouchEvent方法中根据返回判断是否需要调用子dispatchTouchEvent事件,
         *       super.onInterceptTouchEvent默认返回false
         *     3.当子View把down 事件消耗了requestDisallowInterceptTouchEvent(true)才能把后续的事件交给子View,并且不再调用父的onTouchEvent
         *     4.当事件分发下去,onInterceptTouchEvent在调用子View的requestDisallowInterceptTouchEvent时候如果down事件返回的false,
         *       那么后续事件onInterceptTouchEvent也不会再给子view了,转而调用自己的Touch
         *     5.事件消耗,可以在onTouchEvent返回true ,或者dispatchTouchEvent 是true
         
         综上所述:底层简写代码应是这样的
        boolean isContinuDispatch=true;//后续事件继续分发
        boolean interceptTouchEvent=false;//是否调用自己的触摸事件(因为如果子view  requestDisallowInterceptTouchEvent(true)自己的touch就无效了)
       
        public boolean dispatchTouchEvent(MotionEvent ev) {
                //判断自己是否需要拦截
                if (onInterceptTouchEvent(ev)){
                    //按下事件判断后续事件是否还需要分发
                    if (ev.getAction()==MotionEvent.ACTION_DOWN){
                       return  isContinuDispatch=子View.dispatchTouchEvent(ev);
                    }else {
                        //其他事件
                        if (isContinuDispatch){
                          return   子View.dispatchTouchEvent(ev);
                        }
                    }
                }
            //没有被子View拦截,并且子View后续是不收的
            if (!interceptTouchEvent &&!isContinuDispatch){
                    //自己触摸事件决定是否消耗
                return   onTouchEvent(ev);
            }else {
            //被阻止,事件没有被消耗,只能有Activity的OnTouch处理了
            
           return false;
            }
        }
     

    以上总结是我自己测试的结果,与网上说法不一样,有些疑惑,还望大神指点

  • 相关阅读:
    FastDFS搭建
    关于nginx性能优化CPU参数worker_cpu_affinity使用说明
    LNMP一键安装升级nginx及php常用设置 SFTP管理指南
    Nginx的防盗链
    Nginx+PHP 配置漏洞:静态文件都可以当作 PHP 解析
    Nginx技巧:灵活的server_name
    数据库分表时OR Mapping方法
    nginx配置多域名反向代理
    nginx server 实时监控
    转:SQL Server 2005数据库分表实例
  • 原文地址:https://www.cnblogs.com/lizhanqi/p/9289928.html
Copyright © 2011-2022 走看看