Touch事件有关的处理方法主要由三个:
public boolean dispatchTouchEvent(MotionEvent ev)
public boolean onInterceptTouchEvent(MotionEvent ev)
public boolean onTouchEvent(MotionEvent event)
事件 | 含义 |
dispatchTouchEvent | 用来分派事件。 其中调用了onInterceptTouchEvent()和onTouchEvent(),一般不重写该方法 |
onInterceptTouchEvent | 用来拦截事件。 ViewGroup类中的源码实现就是{return false;}表示不拦截该事件, 事件将向下传递(传递给其子View); 若手动重写该方法,使其返回true则表示拦截,事件将终止向下传递, 事件由当前ViewGroup类来处理,就是调用该类的onTouchEvent()方法 |
onTouchEvent | 用来处理事件。 返回true则表示该View能处理该事件,事件将终止向上传递(传递给其父View); 返回false表示不能处理,则把事件传递给其父View的onTouchEvent()方法来处理 |
用的时候,需要重写一下,这三个方法主要在三种类被调用:
基类 | 例子类 | 拥有的方法 |
继承Activity(activity类) | MainActivity(因项目而异) |
dispatchTouchEvent,onTouchEvent |
继承ViewGroup(View容器) | RelativeLayout,FrameLayout,LinearLayout,AbsoluteLayout,ListView,ScrollView… |
dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent |
继承View(View控件) | Button,EditText,TextView,ImageView…. |
dispatchTouchEvent,onTouchEvent |