自定义了两个viewgroup和一个view依次相套,代码测试得出以下结论。
一. touch事件的3个方法
public boolean dispatchTouchEvent(MotionEvent ev); // 分发事件
public boolean onInterceptTouchEvent(MotionEvent ev); // 拦截事件
public boolean onTouchEvent(MotionEvent ev); // 处理事件
PS:viewgroup 拥有这三个方法 acitivity和view没有拦截方法,可以简单理解下,view是最后一个控件了下面没有任何控件了,而activity是界面的起点没必要拦截。
1.dispatchTouchEvent()方法
返回值分为 true,false ,还有可以返回 父类的dispatchTouchEvent()方法。而他们三的区别是什么呢?
①首先 true、false与调用父类dispatchTouchEvent()方法不同的是:父类dispatchTouchEvent()方法中调用了onInterceptTouchEvent()
②其次返回true与false都会让事件终止,不会进行下去。
2.onInterceptTouchEvent()方法
返回值还是可以分为三种true,false,父类onInterceptTouchEvent()方法。
①当返回值为true的时候,表示事件拦截 ,然后调用自己的onTouchEvent()。
②当返回false的时候或者返回父类onInterceptTouchEvent()方法(父类方法默认返回false)表示事件放行,不会调用自己的onTouchEvent()方法。让事件传递下去。
3.onTouchEvent()方法
事件处理方法,通过传过来的MotionEvent ev参数进行事件处理
①返回值为false的时候为在调用自己onTouchEvent()后会调用父类的onTouchEvent().
①返回值为true的时候为在调用自己onTouchEvent()后会不会调用父类的onTouchEvent().表示该方法被自己消费掉。
网友评论