最近已经在开始准备面试了。复习了不少。把温故而知新的知识点,用最简白的白话文表达出来。一呢、是记录下。二呢、万一能帮助你们的话,更好java
首先我随便建了一个ViewGroup,3个重要方法是面试
public class MyViewGroup extends ViewGroup {
//...省略部分代码
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
}
复制代码
而后对这个3个方法作下简单的描述ide
方法 | 做用 | 调用时刻 |
---|---|---|
dispathTouchEvent() | 分发(传递)点击事件 | 当点击事件可以传递给当前View时,该方法就会被调用 |
onInterceptTouchEvent() | 判断是否拦截了某事件(只存在于ViewGroup,普通View没有这个方法) | 在dispathTouchEvent()内部调用 |
onTouchEvent() | 处理点击事件 | 在dispathTouchEvent()内部调用 |
事件分发顺序是 Activity(Window) --> ViewGroup --> View
spa
看着上面的图和分析以下。总共分3个步骤:code
事件首先在Activity里的dispatchTouchEvent()
返回值:
true / false -------> 消费事件(这里false也是消费事件)
super -------------> 事件下发到ViewGroup,调用ViewGroup的dispatchTouchEvent()cdn
事件在ViewGroup里的dispatchTouchEvent()
返回值:
true --------------> 消费事件
false -------------> 不消费事件,也不下发,交给父控件的onTouchEvent()处理
super -------------> 事件下发到当前ViewGroup的onInterceptTouchEvent()
blog
事件在ViewGroup里的onInterceptTouchEvent()
返回值:
true --------------> 事件下发到当前ViewGroup的onTouchEvent()
false / super -----> 事件下发到子View,调用子View的dispatchTouchEvent()
事件
事件在ViewGroup里的onTouchEvent() 返回值:
true --------------> 消费事件
false / super -----> 不消费事件,也不下发,交给父控件的onTouchEvent()处理it
事件在View里的dispatchTouchEvent() 返回值:
true --------------> 消费事件
false -------------> 不消费事件,也不下发,交给父控件的onTouchEvent()处理
super -------------> 事件下发到当前View的onTouchEvent()
io
事件在View里的onTouchEvent() 返回值:
true --------------> 消费事件
false / super -----> 不消费事件,也不下发,交给父控件的onTouchEvent()处理