1.分类
Activity:拥有dispatchTouchEvent和onTouchEvent两个方法。
ViewGroup:拥有dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent三个方法。
View(不能再作为其他view的view):拥有dispatchTouchEvent和onTouchEvent两个方法。
2.总结
view(和activity类似):
-
触摸事件的传递流程是从dispatchTouchEvent开始的,如果不进行人为干预(也就是默认返回父类的同名函数),则事件将会依照嵌套层次从外层向内层传递,到达最内层的view时,就由它的onTouchEvent方法处理,该方法如果能够消费该事件,则返回true,否则返回false。这时事件会重新向外层传递,并由外层view的onTouchEvent方法进行处理,以此类推。
-
如果事件在向内层传递过程中由于人为干预,事件处理函数返回true,则会导致事件提前被消费掉,内层view将不会收到这个事件。
-
view控件的事触发顺序是先执行onTouch方法,在最后才执行onClick方法。如果onTouch返回true,则事件不会继续传递,最后也不会调用onClick方法,否则事件继续传递。
ViewGroup:
-
触摸事件的传递顺序是由activity到viewgroup,再由viewgroup递归传递给它的子view。
-
viewgroup通过onInterceptTouchEvent方法对事件进行拦截,如果该方法返回true,则事件不会继续传递给子view,返回false或者父类的同名函数,则事件会继续传递给子view。
-
在子view中对事件进行消费后,viewgroup将接收不到任何事件。
3.流程图
网友评论