越不懂的越爱装
大家都同等:IT世界没有难不难,只有是否了解过
挑战目录

简书个坑逼,我写了这么久的直接就给我保存的是几个小时前的历史版本,再也不敢用在线编辑器了
什么是触摸事件?
安卓中事件分类如下几种:
1. ACTION_DOWN:手指初次接触到屏幕时触发。
2. ACTION_MOVE:手指在屏幕上滑动时触发(会多次触发)
3. ACTION_UP:手指离开屏幕时触发
4. ACTION_CANCEL:事件被上层拦截时触发
事件如何传递?
事件传递分为 感应到事件,事件分发,事件拦截,事件处理等几个方面
感应到事件?
待了解。。。
会调用Activity中的dispatchTouchEvent方法。
事件分发?
事件分发通过dispatchTouchEvent方法,Activity,View,ViewGroup都有这个方法。
1.在Activity中的dispatchTouchEvent
主要用来将事件给ViewGroup分发,最终如果没有被处理,则调用自己的处理。
public boolean dispatchTouchEvent(MotionEvent ev) {
//当ACTION_DOWN事件(还有Key,Trackball事件)时,调用Activity.onUserInteraction():
//可以override该方法得知用户正在与设备交互。
//对于有一个onUserLeaveHint方法,自动在onPause调用之前(具体不管,这事件无关)
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
onUserInteraction();
}
//调用Activity包含的根视图的dispatchTouchEvent()
if (getWindow().superDispatchTouchEvent(ev)) {
return true;
}
// 如果superDispatchTouchEvent()返回false
//都没有拦截该事件的话,则调用Activity的onTouchEvent()
return onTouchEvent(ev);
}
2.在ViewGroup中的dispatchTouchEvent
ViewGroup有多个子View,这里的dispatchTouchEvent的作用是找到合适的View处理该事件
3.在View中的dispatchTouchEvent (可以说成是View调用处理事件方法的判断)
View没有子View所以他的dispatchTouchEvent的作用为:分发给某个方法处理当前事件。
事件拦截?
事件处理?
事件处理通过onTouchEvent和setOnTouchListener方法里面传递的回调参数的onTouch方法。Activity,View,ViewGroup都有这两个方法。
1.在Activity中的onTouchEvent和onTouch
2.在View中的onTouchEvent和onTouch
3.在ViewGroup中的onTouchEvent和onTouch
PS:对于onClick事件
流程
1. Down事件流程
2. Move事件流程
3. Up事件流程
为什么会有事件冲突
事件冲突如何解决
网友评论