Android事件机制分为按键事件和触摸事件,以下主要是讲触摸事件机制。
主要的三个方法是:
事件分发:public boolean dispatchTouchEvent(MotionEvent ev)
事件拦截:public boolean onInterceptTouchEvent(MotionEvent ev)
事件响应(消费):public boolean onTouchEvent(MotionEvent ev)
(1) 当监听到有事件时,先进入事件分发处理流程,由最外层的view接收传递给下一层的view,依次向里面传递,直到没有子view的那个view,完成事件的传递过程。
(2) 一个View可以添加子View,这个View才有对事件分发(dispatchTouchEvent)和事件拦截(onInterceptTouchEvent),而假如这个View不能添加任何子View了,那他只有时
间响应(onTouchEvent),这个不难理解,因为它都没有下一级了,所以它只能去把事件消费掉,而不能去做分发和拦截了。
(3) dispatchTouchEvent方法
返回值为true时,事件会分发到当前view的dispatchTouchEvent(MotionEvent)进行消费,不会传递到下一层。
返回值为false时,则当前view获得的事件都返回到上一层onTouchEvent方法进行消费,上一层有可能直接是Activity或者是View。
返回值为默认值时(super.dispathTouchEvent)时,则事件会自动分发到当前View的onInterTouchEvent方法(拦截);
(4)onInterceptTouchEvent方法
返回值为true时,则表示当前View对当前事件进行拦截,然后交给当前View的onTouchEvent方法。
返回值为false时,则表示当前View不对当前事件进行拦截,继续交给子View的dispatchTouchEvent方法进行事件分发。
返回默认值是对该事件进行拦截,然后交给当前View的onTouchView进行响应
(5)onTouchEvent方法
返回值为true时,则表示当前View对当前事件进行消费。
返回值为false时,则表示当前View把事件传递到父View的onTouchEvent方法来接收。
默认值则与返回值为false时一致,把事件往上传递。
推荐文章:http://blog.csdn.net/pi9nc/article/details/9281829