Android平台消息响应机制的研究及其触摸屏响应的优化实现
0 引言
近些年来,随着3G 网络的大规模建设和智能手机的迅速普及,移动互联网时代已经到来。作为Google 推出的一款操作系统,Android 自问世以来就吸引了人们广泛的关注,受到众多厂商和开发者的青睐。Android 是一个开放、完整、免费的手机平台,强大的开源特性吸引了越来越多的开发者,Android的版本如今已由最初的1.1 升级到最新的4.0,功能越来越强大,用户体验越来越好,在Android 平台上发布的应用产品更加丰富多彩。
Android 平台上的应用越来越多,人们对应用的要求越来越高。现阶段触屏手机是趋势,触摸是人们与应用交互的主流方式,人们对触摸的灵敏度,简易性和方便度要求越来越高,有必要优化应用的触摸效果。
1 Android 平台的触摸机制
一般而言,事件是用户与UI(图形界面)进行交互的时候所触发的操作。例如在手机屏幕上触摸特定的区域就会触发对应的事件,在Android 中这些事件将被传送到事件处理器,它是一个专门接受事件对象并对其进行翻译和处理的方法。
在 Android 中用户事件响应是很重要的,用户消息主要来源于3 种硬件外部设备:触摸响应(ONTouch系列方法)、按键响应(onKey系列方法)和轨迹球(Trackball)。不论我们是通过触摸方式与屏幕交互,还是使用轨迹球来交互,任何与屏幕相关的交互都是与屏幕相应位置上的视图控件的交互。现在 Android 系统的手机几乎全是触屏,基本的按键越来越少,触摸屏响应成为发展的大趋势,所以在应用设计的时候主要考虑触摸的效果问题,着重优化用户触摸响应。
图1 Android 平台用户消息处理流程
图 1 详细说明了各种用户操作被系统捕获的过程。系统捕获用户的响应后,由Linux 驱动捕获用户的消息,经过Android 框架层的AcTIvity Manager 的作用传递给Activity中的系统方法,通过执行相应的系统方法更新View 类,消息传递至Application Framework 层,最后调用Linux 驱动,控制着界面的绘制和更新。在Android 工程中,触摸相关的接口函数主要封装在android.view.KeyEvent 类中,写触摸屏操控的时候首先导入该类的包,在Activity的子类中对该方法进行说明即可。Android 的事件处理机制相对简单,对于事件处理机制不必详细理解,实现各种响应时只需具体实现各个方法即可,各个方法的具体实现在View类中进行,下面着重说明Android 平台触摸响应的实现。
2 Android 平台触摸响应的实现
一般而言在 Android 中,对于触摸事件的处理如同UI 事件一样,主要通过两种方法来处理,一种是利用View 类的onTouchEvent()方法,一种是实现OnTouchLiSTener 接口的onTouch()方法。系统中当这两种方法都存在的前提下,系统将会优先采用OnTouchListener接口回调方法进行处理。一般在简单的UI 设计界面重写onTouchListener()方法,涉及到多个Activity 切换时在方法中实现Activity 信息保存与跳转即可。
对于大型应用而言,界面状态比较复杂,触摸响应需要详细处理,系统提供了一个专门用于处理用户触摸事件的接口函数onTouchEvent()。实际开发过程中只需先声明此接口函数,然后在主View类中重写该函数实现具体的触摸效果即可。下面是接口函数的声明:
触屏监听方法中只有一个MotionEvent event 参数,此类的实例中保存了玩家触屏的各种动作,常见的有:按下动作、移动动作、多点触屏、屏幕压力等,在此类中定义了很多动作的静态常量值,通过event.getAction()方法获取玩家的动作与所需动作常量值进行匹配。
上面是声音界面的触摸响应处理:event.getAction()是键控的类型,是MotionEvent 类的系统方法,获取当前的触摸响应。当向下触摸屏幕时,就响应MotionEvent.ACTION_DOWN这个动作,当触点满足给定的区间范围,就执行相当的操作,实现游戏的状态跳转。触摸范围在划分的时候最好以屏幕的相对位置为参考点,这样在应用横竖屏的处理或者应用移植的时候会更方便,避免了频繁修改参考坐标的值。在程序入口处继承Activity 的子类中可以获取当前设备屏幕宽和高的具体属性,这样触摸范围确定时以屏幕的宽和高的属性值来定位就可以了。整个触摸部分的流程图如下:
图2 触摸屏操作响应的具体流程
图 2 显示的是游戏过程中触摸屏幕时具体的响应流程,主要涉及到Activity 类和View类。在Activity 类中进行触摸方法onTouchEvent()的声明,在View 类中对该方法进行详细定义和说明。当触摸响应后,触发事件响应机制,event 对象通过getAction()方法获取触摸响应,获得当前的触摸点坐标event.getX()和event.getY(),与方法中的触摸范围进行判断,若在区域内则执行触摸响应。触摸响应执行后需要在触摸释放MotionEvent.ACTION_DOWN进行触摸释放的处理,及时释放当前的触摸响应。
- Android开发技巧:软硬件的巧妙整合(01-16)
- 基于Android的VoIP系统的设计与实现(03-28)
- 基于Android系统的影音播放器开发(03-25)
- Android的阿喀琉斯之踵(07-08)
- Android开发之“hello World”的实现 (07-23)
- 基于Android平台的即时通信系统客户端设计(09-24)