看了很多关于触摸事件的文章,总感觉啰嗦了一大堆,但是什么都没讲明白,新手看了可能反而更乱。这里总结下自己关于触摸事件的理解。
Android 的触摸事件离不开三个方法
dispatchTouchEvent
onInterceptTouchEvent
onTouchEvent
这三个方法是干嘛的呢
第一个dispatchTouchEvent用于对事件进行分发,举个例子分糖果
糖果第一个分到dispatchTouchEvent手上,然后dispatchTouchEvent如果返回了true那么说明他把糖果(事件)占为己有。后面的onInterceptTouchEvent和onTouchEvent里的代码也就没了执行的机会。如果返回false了会怎么样呢?大家可能会以为是继续往下传递,其实不是的,返回false意思相当于dispatchTouchEvent摇头说我不要糖果还给你(把事件丢给了父View的onTouch处理了)
那么什么时候后面的才能分到糖果呢?
当dispatchTouchEvent返回super.dispatchTouchEvent(ev)的时候才会把事件往下传递
这个时候如果是在ViewGroup那么会先传递到onInterceptTouchEvent中来onInterceptTouchEvent如果返回了true那么ViewGroup的onTouchEvent才会被执行,onInterceptTouchEvent如果返回了false或者super.onInterceptTouchEvent()那么事件才能轮到子View来享用。和父View一样,事件先来到了子View的dispatchTouchEvent方法然后子View的dispatchTouchEvent也一样返回true就把事件占为己有(只执行dispatchTouchEvent自己的move和up事件)返回false就把事件丢给父View的onTouch处理,由于View是没有onInterceptTouchEvent方法的,所以dispatchTouchEvent返回super.dispatchTouchEvent(ev)的时候子View的onTouch都会被执行。那么onTouch自己呢。如果onTouch返回true那么这个事件就已经被消费了,如果返回false,那么onTouch会把事件继续传递给父View的onTouch这样父子View的onTouch里的代码就都会被执行了。文字帮助理解大家就着文字看图更好理解
图片转载自Android面试——>Android基础进阶_Jeled的博客-CSDN博客