一、Android最基本的屏幕操控事件
down:按下事件。
move:移动事件。
up:离开事件。
二、在总结的事件传递机制时,先介绍一下ViewGroup与View有关事件传递的方法
ViewGroup有dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent方法
- View有dispatchTouchEvent、onTouchEvent方法
dispatchTouchEvent:触摸事件分发。
onInterceptTouchEvent:触摸事件拦截。返回true时,拦截该动作;返回false时,不拦截该动作。
onTouchEvent:触摸事件消费。返回true时,消耗该动作;返回false时,不消耗该动作。
三、事件分发流程图
分发的是down事件,down事件的分发是为了寻找一个可以处理完整事件的控件,down被处理move和up也就被处理了
注:此事件分发图是不包括拦截的
解释:down事件从activity开始往下层子控件分发,分发到没有子控件的控件view,不能继续往下分发了,所以view开始调用onTouchEvent方法判断自己是否能处理该事件,若返回true代表消耗了该事件,view的dispatchTouchEvent方法也返回true,事件结束;若返回false,代表处理不了这个事件,则down事件往上返回到viewgroup2,viewgroup2的处理同view,此处不再赘述。
带有拦截(onInterceptEvent)的事件分发,返回true表示拦截,false表示不拦截。拦截的意思就是强制停止向下分发,此时该控件将要判断自身是否能处理该事件,如果处理不了就继续向上返回,返回让上一级处理,如果该控件可以处理该事件则事件被消耗,事件结束。
程序运行截图
四、 onTouch方法的返回值说明
return true:事件被消耗,不会继续向下传递。
return false:事件没有被消耗。虽然 onTouch事件中没有super.onTouch()方法,但是该事件还是会继续传递,给该控件的其他方法使用,或给其他的控件使用。
转载自:http://blog.youkuaiyun.com/z1941563559/article/details/54973886