Android事件分发 笔记
参考链接http://blog.csdn.net/guolin_blog/article/details/9097463/http://blog.csdn.net/guolin_blog/article/details/9153747http://www.cnblogs.com/sunzn/archive/2013/05/10/3064129.htmlAndroid事件分发老容...
参考链接
http://blog.csdn.net/guolin_blog/article/details/9097463/
http://blog.csdn.net/guolin_blog/article/details/9153747
http://www.cnblogs.com/sunzn/archive/2013/05/10/3064129.html
Android事件分发老容易忘呢。。。
View的事件分发伪代码:
View.dispatchTouchEvent{
if(mOnTouchListener != null && View.onTouch的返回值){
return true;
}
return View.onTouchEvent(event);
}
补充:
onTouchEvent中存在一个performClick方法,onClick方法在performClick会被调用 从一个View点击到抬手的动作,执行的方法顺序如下:
View.dispatchEvent->View.setOnTouchListener中的onTouch方法-View.onTouchEvent->View.onClick
从手接触屏幕到离开,事件大致如下
此处的Log 来源于鸿洋的博客
DOWN MOVE UP事件传递如下
04-06 10:24:42.158 7857 7857 E MyButton: dispatchTouchEvent ACTION_DOWN
04-06 10:24:42.158 7857 7857 E MainActivity: onTouch ACTION_DOWN
04-06 10:24:42.158 7857 7857 E MyButton: onTouchEvent ACTION_DOWN
04-06 10:24:42.866 7857 7857 E MyButton: dispatchTouchEvent ACTION_MOVE
04-06 10:24:42.866 7857 7857 E MainActivity: onTouch ACTION_MOVE
04-06 10:24:42.866 7857 7857 E MyButton: onTouchEvent ACTION_MOVE
04-06 10:24:42.882 7857 7857 E MyButton: dispatchTouchEvent ACTION_MOVE
04-06 10:24:42.882 7857 7857 E MainActivity: onTouch ACTION_MOVE
04-06 10:24:42.882 7857 7857 E MyButton: onTouchEvent ACTION_MOVE
04-06 10:24:42.922 7857 7857 E MyButton: dispatchTouchEvent ACTION_MOVE
04-06 10:24:42.922 7857 7857 E MainActivity: onTouch ACTION_MOVE
04-06 10:24:42.922 7857 7857 E MyButton: onTouchEvent ACTION_MOVE
04-06 10:24:42.959 7857 7857 E MyButton: dispatchTouchEvent ACTION_MOVE
04-06 10:24:42.959 7857 7857 E MainActivity: onTouch ACTION_MOVE
04-06 10:24:42.959 7857 7857 E MyButton: onTouchEvent ACTION_MOVE
04-06 10:24:44.277 7857 7857 E MyButton: dispatchTouchEvent ACTION_UP
04-06 10:24:44.277 7857 7857 E MainActivity: onTouch ACTION_UP
04-06 10:24:44.277 7857 7857 E MyButton: onTouchEvent ACTION_UP
04-06 10:24:44.279 7857 7857 E MainActivity: dispatchTouchEvent OnClick
ViewGroup事件分发的伪代码:
ViewGroup.dispatchTouchEvent{
if (disallowIntercept || ! ViewGroup.onInterceptTouchEvent(ev)) {
//遍历child,执行以下code
if(child.dispatchTouchEvent(ev)){
...
return true;
}
}
if (target == null) {
...
return super.dispatchTouchEvent(ev);//即view.dispatchTouchEvent
}
}
//disallowIntercept默认false
ViewGroup事件分发执行流程:还是借郭神的图片吧,比较清晰
=====
20/12/03更新 发现一篇讲的非常好的事件分发的文章
https://www.cnblogs.com/renhui/p/12127680.html
更多推荐
所有评论(0)