相关Touch事件的方法
1、public boolean dispatchTouchEvent(MotionEvent ev) ————事件分发方法,分发Event所调用
2、public boolean onInterceptTouchEvent(MotionEvent ev) ————事件拦截方法,拦截Event所调用
3、public boolean onTouchEvent(MotionEvent event) ————事件响应方法,处理Event所调用
拥有上述事件的类
1、Activity类(Activity及其各种继承子类)
dispatchTouchEvent()、onTouchEvent()
2、ViewGroup类(LinearLayout、FrameLayout、ListView等…..)
dispatchTouchEvent()、onInterceptTouchEvent()、onTouchEvent()
3、View类(Button、TextView等…..)
dispatchTouchEvent()、onTouchEvent()
需要特别注意一点就是ViewGroup中额外拥有onInterceptTouchEvent()方法,其他两个方法为这三种类所共同拥有
方法的简单用途解析
我们可以发现这三个方法的返回值都为boolean类型,其实它们就是通过返回值来决定下一步的传递处理方向。
1、dispatchTouchEvent() ——用来分发事件所用
该方法会将根元素的事件自上而下依次分发到内层子元素中,直到被终止或者到达最里层元素,该方法也是采用一种隧道方式来分发。在其中会调用onInterceptTouchEvent()和onTouchEvent(),一般不会去重写。
返回false则不拦截继续往下分发,如果返回true则拦截住该事件不在向下层元素分发,在dispatchTouchEvent()方法中默认返回false。
2、onInterceptTouchEvent() ——用来拦截事件所用
该方法在ViewGroup源代码中实现就是返回false不拦截事件,Touch事件就会往下传递给其子View。
如果我们重写该方法并且将其返回true,该事件将会被拦截,并且被当前ViewGroup处理,调用该类的onTouchEvent()方法。
3、onTouchEvent() ——用来处理事件
返回true则表示该View能处理该事件,事件将终止向上传递(传递给其父View)
返回false表示不能处理,则把事件传递给其父View的onTouchEvent()方法来处理