目录
6.Android事件处理和手势(一)
1.事件处理概述
现在的图形界面应用程序都是通过事件来实现人机交互的。事件就是用户对图形界面的操作。在Android手机和平板电脑上,主要包括物理按键事件和触摸屏事件两大类。物理按键事件包括按下、抬起和长按等;触摸屏事件包括按下、拾起、滑动和双击等。
在Android组件中提供了事件处理的相关方法。例如,在View类中提供了onTouchEvent() 方法,可以重写该方法来处理触摸屏事件,这种方式主要适用于重写组件的场景,但是仅仅通过重写这个方法来完成事件处理是不够的。为此,Android 提供了使用setOnTouchListener()方法为组件设置监听器来处理触摸屏事件,这在日常开发中更加常用。
在Android中提供了两种方式的事件处理,一种是基于监听的事件处理,另一种是基于回调的事件处理。
1-1.基于监听的事件处理
实现基于监听的事件处理,主要做法就是为Android的UI组件绑定特定的事件监听器。在事件监听的处理模型中,主要有以下3类对象:
◆Event Source (事件源) :即产生事件的来源,通常是各种组件,例如,按钮、窗口和菜单等。
◆Event(事件):事件中封装了UI组件上发生的特定事件的具体信息,如果监听器需要获取UI组件上所发生事件的相关信息,一 般通过Event对象来传递。
◆Event Listener (事件监听器) :监听事件源所发生的事件,并对不同的事件做出相应的响应。
1-2.基于回调的事件处理
实现基于回调的事件处理,主要做法就是重写Android组件特定的回调方法,或者重写Activity组件的回调方法。从代码实现的角度看,基于回调的事件处理模型更加简单。为了使用回调机制来处理GUI组件(图形用户界面)上所发生的事件,需要为该组件提供对应的事件处理方法,可以通过继承GUI组件类,并重写该类的事件处理方法来实现。
为了实现回调机制的事件处理,Android为所有GUI组件都提供了一些事件处理的回调方法, 例如,在View类中就包含了一些事件处理的回调方法,这些方法如表6.1所示。
表6.1 View类中事件处理的回调方法
方法 | 说明 |
---|---|
boolean onKeyDown(int keyCode, KeyEvent event) | 当用户在该组件上按下某个按键时触发 |
bolean onKeyLongPress(int keyCode, KeyEvent event) | 当用户在该组件上长按某个按键时触发 |
boolean onKeyShortcut(int keyCode, KeyEvent event) | 当一个键盘快捷键事件发生时触发 |
boolean onKeyUp(int keyCode, KeyEvent event) | 当用户在该组件上松开某个按键时触发 |
boolean onTouchEvent (MotionEvent event) | 当用户在该组件上触发触摸屏事件时触发 |
boolean onTrackballEvent(MotionEvent event) | 当用户在该组件上触发轨迹球事件时触发 |
一般来说,基于回调的事件处理方式可用于处理一些通用性的事件,事件处理的代码会比较简洁。但对于某些特定的事件,无法采用基于回调的事件处理方式实现时,就只能采用基于监听的事件处理方式了。
2.物理按键事件处理
一个标准的 Android设备包含了多个能够触发事件的物理按键。
Android设备常用物理按键能够触发的事件及其说明如表6.2所示。
表6.2 Android 设备可用物理按键及其触发事件</