博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序
阅读量:6259 次
发布时间:2019-06-22

本文共 2683 字,大约阅读时间需要 8 分钟。

一直想弄清楚onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent的执行顺序,以及内部使用switch (event.getAction())中的执行顺序。趁这次机会赶紧弄清楚。

 

public boolean onTouchEvent(MotionEvent event) {        super.onTouchEvent(event);        Log.e(TAG, "onTouchEvent");        switch (event.getAction()) {        case MotionEvent.ACTION_DOWN:            Log.e(TAG, "onTouchEvent_ACTION_DOWN");            break;        case MotionEvent.ACTION_MOVE:            Log.e(TAG, "onTouchEvent_ACTION_MOVE");            break;        case MotionEvent.ACTION_UP:            Log.e(TAG, "onTouchEvent_ACTION_UP");            break;        default:            break;        }        Log.e(TAG, "onTouchEvent_return");        return isOnTouchEvent;    }    @Override    public boolean onInterceptTouchEvent(MotionEvent event) {        Log.e(TAG, "onInterceptTouchEvent");        switch (event.getAction()) {        case MotionEvent.ACTION_DOWN:            Log.e(TAG, "onInterceptTouchEvent_ACTION_DOWN");            break;        case MotionEvent.ACTION_MOVE:            Log.e(TAG, "onInterceptTouchEvent_ACTION_MOVE");            break;        case MotionEvent.ACTION_UP:            Log.e(TAG, "onInterceptTouchEvent_ACTION_UP");            break;        default:            break;        }        Log.e(TAG, "onInterceptTouchEvent_return");        return isOnInterceptTouchEvent;    }    @Override    public boolean dispatchTouchEvent(MotionEvent event) {        super.dispatchTouchEvent(event);        Log.e(TAG, "dispatchTouchEvent");        switch (event.getAction()) {        case MotionEvent.ACTION_DOWN:            Log.e(TAG, "dispatchTouchEvent_ACTION_DOWN");            break;        case MotionEvent.ACTION_MOVE:            Log.e(TAG, "dispatchTouchEvent_ACTION_MOVE");            break;        case MotionEvent.ACTION_UP:            Log.e(TAG, "dispatchTouchEvent_ACTION_UP");            break;        default:            break;        }        Log.e(TAG, "dispatchTouchEvent_return");        return isDispatchTouchEvent;    }

重写上面几个方法后。我们在LogCat中看看打印的结果。

一.isOnInterceptTouchEvent==true时。

1.isOnTouchEvent==true,isDispatchTouchEvent==true。

因为onInterceptTouchEvent返回true,这说明要拦截此事件,因此在同一个事件序列中该方法不会再次被调用。下同。

2.isOnTouchEvent==true,isDispatchTouchEvent==false。

3.isOnTouchEvent==false,isDispatchTouchEvent==true。

4.isOnTouchEvent==false,isDispatchTouchEvent==false。

二.如果isOnInterceptTouchEvent==false。

1.isOnTouchEvent==true,isDispatchTouchEvent==true。

因为onInterceptTouchEvent返回tfalse,这说明不拦截此事件,因此不调用onTouchEvent。下同。

 2.isOnTouchEvent==true,isDispatchTouchEvent==false。

 

3.isOnTouchEvent==false,isDispatchTouchEvent==true。

4.isOnTouchEvent==false,isDispatchTouchEvent==false。

 

转载于:https://www.cnblogs.com/tangZH/p/5931509.html

你可能感兴趣的文章
本地推送
查看>>
Beta 冲刺 (7/7)
查看>>
区块链实现简单的电商交易(以太坊)
查看>>
VMware报错:"激活连接失败:No suitable device found for this connection."
查看>>
maven设置
查看>>
个人考场VIM配置
查看>>
adobe
查看>>
微信小程序中的分享事件
查看>>
HDU 6069 Counting Divisors【区间素筛】【经典题】【好题】
查看>>
使用HAXM为QEMU for Windows加速
查看>>
配置tomcat下war包可以自压缩
查看>>
idea中artifacts、facets、modules是什么意思?
查看>>
大数据下的Distinct Count(一):序
查看>>
android 打包
查看>>
FUCKED-BUG之临时对象的生死
查看>>
一句话开启XP_CMDSHELL
查看>>
【100题】第四十五题 雅虎面试两道题(矩阵判断、数组划分)
查看>>
MySQL基础知识
查看>>
HTML页面优化
查看>>
centos6下安装docker
查看>>