Android 中文API (91) —— GestureDetector
前言
本章内容是android.view.GestureDetector,版本为Android 2.3 r1,翻译来自"Haiya 胡蝶",再次感谢"Haiya 胡蝶" !期待你一起参与Android中文API的翻译,联系我over140@gmail.com。
声明
欢迎转载,但请保留文章原始出处:)
Android中文翻译组:http://goo.gl/6vJQl
正文
一、结构
public class GestureDetector extends Object
java.lang.Object
android.view.GestureDetector
通过系统提供的MotionEvent
来监测各种手势和(触摸)事件。当一个指定的手势事件发生时,GestureDetector.OnGestureListener
回调函数将通告用户。这个类仅仅处理由触摸引发的MotionEvent
(不能处理由轨迹球引发的事件)。要使用这个类需执行以下操作:
* 为你的View
建立一个GestureDetector实例。
* 在View的onTouchEvent(MotionEvent)方法里确保调用(GestureDetector的)onTouchEvent(MotionEvent)方法。当相关事件发生时,定义在回调函数里的方法将被执行。
三、嵌套类
interface GestureDetector.OnDoubleTapListener
双击和轻击(confirmed single-tap)事件的监听器。(译者注:confirmed single-tap是用户快速点一下触摸屏所引发的动作。区分下面两种情况:
1. 手指按下,停留0.2秒(估计值)以上再抬起时,不算confirmed single-tap
2. 快速点击屏幕两次不会引发两次confirmed single-tap事件,而是引发一次DoubleTap事件。)
interface GestureDetector.OnGestureListener
在有手势动作发生时,通知的监听器
class GestureDetector.SimpleOnGestureListener
当只需要监听部分手势时,用于扩展的便捷类
四、构造函数
public GestureDetector (GestureDetector.OnGestureListener listener, Handler handler)
通过提供的监听器来创建一个GestureDetector,这个构造函数只能用于非UI线程(因为它允许指定一个handler)。
参数
listener 用于触发所有回调函数的监听器,不能为空
handler 需要使用到的handler
异常
NullPointerException Listener或者handler为空时
public GestureDetector (GestureDetector.OnGestureListener listener)
通过提供的监听器来创建一个GestureDetector。你只能于UI线程里使用这个构造函数(这是通常的情况)
参数
listener 用于触发所有回调函数的监听器,不能为空
异常
NullPointerException 如果Listener为空
参见
public GestureDetector (Context context, GestureDetector.OnGestureListener listener)
通过提供的监听器来创建一个GestureDetector。(通常情况下)你只能于UI线程里使用这个构造函数
参数
context 应用程序上下文
listener 用于触发所有回调函数的监听器,不能为空
异常
NullPointerException 如果Listener为空
参见
public GestureDetector (Context context, GestureDetector.OnGestureListener listener, Handler handler)
通过提供的监听器来创建一个GestureDetector. (通常情况下)你只能于UI线程里使用这个构造函数
参数
context 应用程序上下文
listener 用于触发所有回调函数的监听器,不能为空
handler 需要使用到的handler
异常
NullPointerException 如果Listener为空
参见
public GestureDetector (Context context, GestureDetector.OnGestureListener listener, Handler handler, boolean ignoreMultitouch)
通过提供的监听器来创建一个GestureDetector. (通常情况下)你只能于UI线程里使用这个构造函数
参数
context 应用程序上下文
listener 用于触发所有回调函数的监听器,不能为空
handler 需要使用到的handler
ignoreMultitouch 是否忽视多点触控(译者注:仅适用于2.2以上的android版本,如果没设置这个参数(即使用的是上一个构造函数),则会忽视多点触控
,由于网上都没有在GestureDetector传入handler的例子,所以我也不明白这里的handler的具体用意。如果有需要深入理解的朋友,请参照GestureDetector的源码
异常
NullPointerException 如果Listener为空
参见
五、公共方法
public boolean isLongpressEnabled ()
返回值
如果允许长按事件,则返回true,否则为false
public boolean onTouchEvent (MotionEvent ev)
分析指定的动作事件,如何满足条件,就触发在GestureDetector.OnGestureListener
中提供的回调函数
参数
ev 当前的触摸事件(译者注:如MotionEvent_DOWN, MotionEvent_UP)
返回值
如果GestureDetector.OnGestureListener
消耗了这个事件,则返回true,否则返回false
public void setIsLongpressEnabled (boolean isLongpressEnabled)
设置是否启用长按。如果启用长按,当用户按下并保持按下状态时,将收到一个长按事件,同时不再接收其它事件;如果禁用长按,当用户按下并保持按下状态然后再移动手指时,将会接收到scroll事件。长按默认为启用。
参数
isLongpressEnabled 是否启用接收长按事件
public void setOnDoubleTapListener (GestureDetector.OnDoubleTapListener onDoubleTapListener)
设置双击及其相关手势的监听器
参数
onDoubleTapListener 触发所有回调函数的监听器,或者设为null以停止监听双击的手势
六、补充