android touch

来源:互联网 发布:淘宝怎么解绑身份证号 编辑:程序博客网 时间:2024/06/05 10:47


一,xml中设置clickable=false失效

        在代码中调用了setOnClickListener,后会调用setClickable(true);   

        listener的调用会在onTouchEvent之前;


二,touch listener和ontouchevent的处理顺序

        先调用listener,后调用ontouchevent; 如果listener的回调返回为true,则不再调用ontouchevent;  反之则相反!

       可以理解为listener是ontouchevent回调的最后阀门


五,事件调用流程

        dispatchTouchEvent -> onInterceptTouchEvent -> onTouchEvent


二,dispatchTouchEvent是事件的分发者,也包括分发到自身,当这个事件返回为true时则组件拦截了事件;

        在组件的ontouchevent或者touch listener中返回true都会拦截事件;


三,view中没有onInterceptTouchEvent,但有dispatchTouchEvent

         viewGroup不再调用onInterceptTouchEvent的场景:

        1, viewGroup之下的child在onTouchEvent中返回了false;  

         2,viewGroup在onTouchEvent中返回了true; 

         即是当系统确认事件由viewGroup中处理,则不再调用onInterceptTouchEvent;


四,丢失事件

       事件类型是ACTION_MOVE时返回false不会丢失事件,在DOWN的时候返回false则丢失事件; 

       当所有的view都不处理DOWN事件的时候则丢失事件;

       事件拦截对事件是否处理无关系;


六,页面不处理任何事件的方法

       在activity的dispatchtouchevent中直接返回false,则任何事件都不再进行处理


七:禁止父组件拦截

        requestDisallowInterceptTouchEvent(true); 

       可以禁止组件之上的所有父组件拦截事件


八:如何直接让view不响应任何事件

        在dispatchTouchEvent 中直接返回false,则组件不再处理任何事件,因为这个方法是事件的其实分发者

       如果在dispatchTouchEvent 没有调用super.dispatchTouchEvent ,则不会调用view的ontouchevent回调!


九:同方向的viewpager是如何避免事件冲突的


十:子组件处理了事件后为什么父组件不响应任何事件

         在父组件的dispatchTouchEvent 中注册,事件已经被其子组件处理,父组件不再响应事件;

         要注意如果没有特殊处理,父组件的dispatchTouchEvent 和onInterceptTouchEvent 回调还是会调用的!

        所以即使子组件在dispatchTouchEvent 中直接返回true,父组件的dispatchTouchEvent 和onInterceptTouchEvent 回调还是会调用的!


 


0 0
原创粉丝点击