Android事件处理机制是基于Listener实现的,比如触摸屏相关的事件,就是通过onTouchListener实现;
所有View的子类都可以通过setOnTouchListener()、setOnKeyListener()等方法来添加对某一类事件的Listener;
Listener一般以Interface的方式来提供,其中包含一个或多个abstract方法,我们需要实现这些方法来完成onTouch()、onKey()等操作。这样,程序便可以在特定的事件被dispatch到该view的时候,通过callback函数给予适当的响应。
当用户触摸屏幕的时候,会产生许多手势,可以通过下列方式接收事件处理:
1.View类有个View.onTouchListener内部接口,可以通过重写它的onTouch(View v, MotionEvent event)方法,处理一些在该控件中触发的touch事件;
2.也可以通过重写Activity的onTouchEvent方法;
3.通过Android sdk提供的GestureDetector类
onTouch()方法:
当一个View绑定了OnTouchListener后,当有Touch事件触发时,就会调用onTouch方法。当把手放到View上后,onTouch方法被一遍一遍的调用
onTouchEvent()方法:
重写了Activity的onTouchEvent方法后,当屏幕有Touch事件时,此方法就会被调用。当把手放到Activity上时,onTouchEvent方法会一遍一遍的被调用
GestureDetector:
在onTouch()/onTouchEvent()方法中,我们调用GestureDetector的onTouchEvent()方法,将捕捉到的MotionEvent交给GestureDetector * 来分析是否有合适的callback函数来处理用户的手势
Touch事件的传递:
在一个Activity里面放一个控件的实例c,并且这个c的属性设定为march_parent
当把手放到屏幕上时,首先控件c响应Touch事件,执行onTouch方法。
如果onTouch返回值为true,表示这个Touch事件被onTouch方法处理完毕,不会把Touch事件再传递给Activity
也就是说onTouchEvent方法不会被调用,当把手放到屏幕上后,onTouch方法会被一遍一遍的调用
?
如果onTouch返回值为false,表示这个Touch事件没有被c完全处理,onTouch返回以后,Touch事件被传递给Activity,
onTouchEvent方法调用,当把手放到屏幕上后,onTouch方法调用一次后,onTouchEvent方法被一遍一遍的调用
参考:
https://blog.csdn.net/lc_miao/article/details/78274840
https://blog.csdn.net/carson_ho/article/details/54136311
原文:https://www.cnblogs.com/vivian187/p/12789831.html