星空网 > 软件开发 > 操作系统

事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序

一直想弄清楚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。

事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序images/loading.gif' data-original="http://images2015.cnblogs.com/blog/1019373/201610/1019373-20161004191922457-1189606632.png" />事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序

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

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

事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序

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

事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序

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

事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序

二.如果isOnInterceptTouchEvent==false。

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

事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序

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

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

 事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序

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

事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序

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

事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序

 




原标题:事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

11月1日起 俄罗斯网商必须接受本土支付系统:https://www.ikjzd.com/articles/133565
还在观望站外流量迟迟不敢下手?一篇教你利用好站外引流利器!:https://www.ikjzd.com/articles/133566
又被限制销售!对于玩具类目你真的了解吗?:https://www.ikjzd.com/articles/133567
美国大选如何影响新上架产品的走势?:https://www.ikjzd.com/articles/133568
Twitter获客并不难,五种营销操作不花钱揽客:https://www.ikjzd.com/articles/133569
外贸建站流程需要注意哪些环节?:https://www.ikjzd.com/articles/133570
五月电商盛宴:节假日营销策略解析与商机揭秘 :https://www.kjdsnews.com/a/1842215.html
2023年意大利在线销售额超800亿欧元,增长27.14%:https://www.kjdsnews.com/a/1842216.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流