事件分发:用户点击屏幕(view或者viewGroup)产生点击事件(touch事件),touch事件的(发生触摸的位置,事件,历史记录,手势动作等一系列)都是已经封装的MotionEvent对象
Touch事件一般有如下几种
//点击view
public static final int ACTION_DOWN = 0;
//抬起view,与down对应
public static final int ACTION_UP = 1;
//滑动事件
public static final int ACTION_MOVE = 2;
//非人为原因结束本次事件
public static final int ACTION_CANCEL = 3;
//用户触碰超出了正常的ui边界.
public static final int ACTION_OUTSIDE = 4;
//多手势触摸,第二个点击
public static final int ACTION_POINTER_DOWN = 5;
//多手势触摸,第二个抬起,对应 ACTION_POINTER_DOWN
public static final int ACTION_POINTER_UP = 6;
任何事件都是以DOWN时间开始,UP时间结束,中间有无数的MOVE事件
事件分发过程晋国的方法:
方法 | 作用 | 调用时间 |
---|---|---|
dispatchTouchEvent() | 分发(传递)点击事件 | 当点击事件能够传递给当前view时,去调用 |
onInterceptTouchEvent() | 判断是否拦截了某个事件,只存在viewGroup | dispatchTouchEvent()内部调用 |
onTouchEvent() | 处理点击事件 | dispatchTouchEvent |
android中事件分发顺序是:activity-->viewGroup-->view
具体如下:进入页面开始调用activity的dispatchTouchEvent()事件,默认就是调用父控件的onInterceptTouchEvent()事件,如果dispatchTouchEvent()表示要处理事件(消费或者不消费时间都会结束),消费事件直接处理事件,不消费就返回给父层的onTouchEvent()来处理。
如果是默认调用了父层的onInterceptTouchEvent(),就判断是否要拦截事件,默认不拦截,最终还是调用自身的onTouchEvent()处理事件
网友评论