File tree Expand file tree Collapse file tree 1 file changed +54
-0
lines changed
Expand file tree Collapse file tree 1 file changed +54
-0
lines changed Original file line number Diff line number Diff line change 1+ #Android中View的触摸事件涉及到哪些方法?他们之间有什么关系?
2+
3+ 在Android中的View触摸事件处理主要涉及以下三个方法
4+
5+ - dispatchTouchEvent()
6+ - onInterceptTouchEvent()
7+ - onTouchEvent()
8+
9+ View的触摸事件传递,从前到后按照以下顺序
10+
11+ 1 . Activity
12+ 2 . PhoneWindow
13+ 3 . DecorView
14+ 4 . 子View
15+
16+ 他们之间的关系如下
17+
18+ - 当触摸事件来临时,dispatchTouchEvent()会被调用,它的返回值由onInterceptTouchEvent()和child.dispatchTouchEvent()共同决定
19+ - 在dispatchTouchEvent()中,onInterceptTouchEvent()会被调用,onInterceptTouchEvent()决定的是当前ViewGroup是否对触摸事件进行拦截,如果返回true,则触摸事件由当前ViewGroup的onTouchEvent()处理,否则触摸事件会被分发到子View,由子View进行处理。
20+ - onTouchEvent()中对具体的触摸事件进行处理。
21+
22+ 他们之间的关系可以用伪代码标示,如下:
23+
24+ ```
25+ public boolean dispatchTouchEvent(MotionEvent ev) {
26+ boolean consume = false;
27+ if (onInterceptTouchEvent(ev)) {
28+ consume = onTouchEvent(ev);
29+ } else {
30+ consume = child.dispatchTouchEvent(ev);
31+ }
32+ return consume;
33+ }
34+ ```
35+
36+ 另外,ViewGroup.onInterceptTouchEvent()默认返回false,即对触摸事件不进行拦截,都会分发到子View。
37+
38+ 如果View设置了onTouchListener(),则onTouchListener()的处理在onTouchEvent()之前,如果onTouchListener()返回true,则View.onTouchEvent()不会被调用,即onTouchListener()的优先权高于onTouchEvent()
39+
40+ Android中默认认为View是消耗onTouchEvent()的,即返回值为true,除非它是不可点击的,即clickable和longClickable都为false。
41+
42+ #更多参考资料
43+
44+ - Android开发艺术探索-第三章 View的事件体系
45+
46+ #关于我
47+
48+ 江湖人称『凯子哥』,其实就是一个闷骚的90后技术宅,Android开发者,喜欢技术分享,热爱开源。
49+
50+ - 我的CSDN博客:[ http://blog.csdn.net/zhaokaiqiang1992 ] ( http://blog.csdn.net/zhaokaiqiang1992 )
51+ - 我的微博:[ 裸奔的凯子哥] ( http://weibo.com/zhaokaiqiang1992 ) ,每天会不定时分享高质量博客,欢迎关注
52+ - 微信公众账号:kaizige1992
53+
54+ ![ ] ( http://i12.tietuku.com/f55c34ddb1ba3830.jpg )
You can’t perform that action at this time.
0 commit comments