【Android论文栏目提醒】:网学会员--在 Android论文编辑为广大网友搜集整理了:Android移动应用触摸屏的实现和优化 - 其它论文绩等信息,祝愿广大网友取得需要的信息,参考学习。
Android 移动应用触摸屏的实现和优化 朱文充,黄小军 (北京邮电大学信息与通信工程学院,北京 100876) 5 摘要:随着智能手机平台的发展,
Android 平台应用越来越丰富,用户体验要求也越来越高。
Android 平台捕获用户的消息主要分为按键,触摸屏和轨迹球三种类型,现阶段触摸响应是 趋势。
本文主要研究了
Android 平台的消息响应机制,着重对游戏应用中的触摸屏响应进行 了实现和优化,优化后的触摸接口避免了触摸过程中的各种问题,具有更好的用户体验 。
关键词:
Android;消息;事件;触摸屏10 中图分类号:TP311.1 Implementation and Optimization of Touch Screen based on
Android Platform Zhu Wenchong Huang Xiaojun15 School of Information and Communication Engineering Beijing University of Posts and Telecommunications Beijing 100876 Abstract: With the development of the smart phone platform the applications on the
Android platforms become rich and users have a higher demand on using experiences. There are three ways to acquire user’s information on
Android platform: button touch screen and trackball and20 touching response are the leading tendency. In this paper much attention had been focused on the message response mechanism of the
Android platform. It put much emphasis on the implement and optimization of the touching response in games. The touching interface can avoid various problems in the touching process and have better using experiences. Keywords:
Android Message Events Touch Screen25 0 引言 近些年来,随着 3G 网络的大规模建设和智能手机的迅速普及,移动互联网时代已经到 来。
作为 Google 推出的一款操作系统,
Android 自问世以来就吸引了人们广泛的关注,受到 众多厂商和开发者的青睐。
Android 是一个开放、完整、免费的手机平台,强大的开源特性30 吸引了越来越多的开发者,
Android 的版本如今已由最初的 1.1 升级到最新的 4.0,功能越来 越强大,用户体验越来越好,在
Android 平台上发布的应用产品更加丰富多彩。
Android 平台上的应用越来越多,人们对应用的要求越来越高。
现阶段触屏手机是趋势, 触摸是人们与应用交互的主流方式,人们对触摸的灵敏度,简易性和方便度要求越来越高, 有必要优化应用的触摸效果。
35 1
Android 平台的触摸机制 一般而言,事件是用户与 UI图形界面进行交互的时候所触发的操作。
例如在手机屏幕 上触摸特定的区域就会触发对应的事件,在
Android 中这些事件将被传送到事件处理器,它 是一个专门接受事件对象并对其进行翻译和处理的方法1。
在
Android 中用户事件响应是很重要的,用户消息主要来源于 3 种硬件外部设备:触摸40 响应onTouch 系列方法、按键响应onKey 系列方法和轨迹球Trackball。
不论我们是通过 触摸方式与屏幕交互,还是使用轨迹球来交互,任何与屏幕相关的交互都是与屏幕相应位置 作者简介:朱文充,1986-,男,硕士研究生,主要研究方向:移动通信与计算机应用。
通信联系人:黄小军,1965-,女,副教授,硕士生导师,主要研究方向:移动嵌入式应用新技术的研究, 移动增值新业务的研究与实现。
E-mail: hxjbupt.edu.cn -1- 上的视图控件的交互2。
现在
Android 系统的手机几乎全是触屏,基本的按键越来越少, 触摸屏响应成为发展的大趋势,所以在应用设计的时候主要考虑触摸的效果问题,着重优化 用户触摸响应。
45 图 1
Android 平台用户消息处理流程 Fig. 1 The process of message on
Android platform 图 1 详细说明了各种用户操作被系统捕获的过程。
系统捕获用户的响应后,由 Linux 驱50 动捕获用户的消息,经过
Android 框架层的 Activity Manager 的作用传递给 Activity 中的系 统方法,通过执行相应的系统方法更新 View 类,消息传递至 Application Framework 层,最 后调用 Linux 驱动,控制着界面的绘制和更新。
在
Android 工程中,触摸相关的接口函数主 要封装在
android.view.KeyEvent 类中,写触摸屏操控的时候首先导入该类的包,在 Activity 的子类中对该方法进行说明即可。
Android 的事件处理机制相对简单,对于事件处理机制不55 必详细理解,实现各种响应时只需具体实现各个方法即可,各个方法的具体实现在 View 类 中进行,下面着重说明
Android 平台触摸响应的实现。
-2- 2
Android 平台触摸响应的实现 一般而言在
Android 中,对于触摸事件的处理如同 UI 事件一样,主要通过两种方法来 处理,一种是利用 View 类的 onTouchEvent方法,一种是实现 OnTouchListener 接口的60 onTouch方法。
系统中当这两种方法都存在的前提下,系统将会优先采用 OnTouchListener 接口回调方法进行处理3。
一般在简单的 UI 设计界面重写 onTouchListener方法,涉及到多 个 Activity 切换时在方法中实现 Activity 信息保存与跳转即可。
对于大型应用而言,界面状态比较复杂,触摸响应需要详细处理,系统提供了一个专门 用于处理用户触摸事件的接口函数 onTouchEvent。
实际开发过程中只需先声明此接口函65 数,然后在主 View 类中重写该函数实现具体的触摸效果即可。
下面是接口函数的声明: public boolean onTouchEventMotionEvent event//系统方法,返回触摸的响应 // TODO Auto-generated method stub 70 return gamecanvas.onTouchEventevent //在程序入口部分进行声明 gamecanvas 继续了主 View 类,在 gamecanvas 类的 onTouchEvent 方法中对各种具体情 况进行处理: case GAMESTATE_CLRSOUND:// 当前处于的状态 switch event.getAction //获取触摸状态75 case MotionEvent.ACTION_DOWN:// 向下触摸响应 if event.getX scrWidth - 50 event.getX scrHight – 45//范围比较 event.getY 6 menuSel 0 gameState GAMESTATE_CLR// 状态跳转 85 触屏监听方法中只有一个 MotionEvent event 参数,此类的实例中保存了玩家触屏的各 种动作,常见的有:按下动作、移动动作、多点触屏、屏幕压力等,在此类中定义了很多动 作的静态常量值,通过 event.getAction方法获取玩家的动作与所需动作常量值进行匹配4。
上面是声音界面的触摸响应处理:event.getAction是键控的类型,是 MotionEvent 类的 系统方法,获取当前的触摸响应。
当向下触摸屏幕时,就响应 MotionEvent.ACTION_DOWN90 这个动作,当触点满足给定的区间范围,就执行相当的操作,实现游戏的状态跳转。
触摸范 围在划分的时候最好以屏幕的相对位置为参考点,这样在应用横竖屏的处理或者应用移植的 时候会更方便,避免了频繁修改参考坐标的值。
在程序入口处继承 Activity 的子类中可以获 取当前设备屏幕宽和高的具体属性,这样触摸范围确定时以屏幕的宽和高的属性值来定位就 可以了。
整个触摸部分的流程图如下: -3- 95 图 2 触摸屏操作响应的具体流程 Fig. 2 The specific flow of the touching response 图 2 显示的是游戏过程中触摸屏幕时具体的响应流程,主要涉及到 Activity 类和 View100 类。
在 Activity 类中进行触摸方法 onTouchEvent的声明,在 View 类中对该方法进行详细 定义和说明。
当触摸响应后,触发事件响应机制,event 对象通过 getAction方法获取触摸 响应,获得当前的触摸点坐标 event.getX和 event.getY,与方法中的触摸范围进行判断, 若在区域内则执行触摸响应。
触摸响应执行后需要在触摸释放 MotionEvent.ACTION_DOWN 进行触摸释放的处理,及时释放当前的触摸响应。
-4-105 3
Android 平台触摸响应的优化 值得注意的是,上面触摸响应 MotionEvent.ACTION_DOWN 中,特意定义了一个临时 触摸计数变量 keyCount,当计数变量加到一定的程度时候才执行触摸响应。
这样处理能有 效地防止连续触摸响应,触摸不释放而直接跳到下一个状态,触摸变量的设置在各个界面跳 转过程中尤其是游戏菜单中各界面跳转中是很有必要的。
110 触摸响应中除了各个菜单界面的响应以外还有一个重要的响应就是游戏中对主角的操 控。
主游戏界面的触摸响应原理和菜单界面是一致的,不同的是触摸判断范围的选取有差异, 菜单界面各个触摸范围是固定的,而游戏界面触摸区域的划定是动态的。
由于在角色扮演等 游戏中主角是核心人物,因此对主角的操控的触摸响应显得尤其重要,进行触摸设计的时候 一般以主角为中心进行设计,以主角的坐标作为基本点来判断。
115 图 3 主角控制时区域的划分 Fig. 3 The area division of the main character 图 3 所示的是主角移动时候的区域划分,以水平和垂直坐标轴的交点作为主角的坐标中120 心点,将主角周边的区域划分为 10 个区域,触点在区域 9-10 的时候方向向右,对称的区域 5-6 的时候方向向左,区域 7-8 的时候方向向下。
对于区域 1-4 进行进一步的划分,2-3 区域 方向向上,只响应向上的操作,区域 1 同时响应右键和上键,区域 4 同时响应左键和上键。
这样对区域进行细化符合实际情况,区域 1 和区域 4 的角度范围可以根据实际情况微调。
ifevent.getY playerY //若触点在主角上方125 ifevent.getX playerX - 10 player.keyDownSonicPlayer.KEY_LEFT//同时响应左键和上键 player.keyDownSonicPlayer.KEY_UP//向左上方跳跃 130 else ifevent.getX playerX 55 //触点在主角右上方 player.keyDownSonicPlayer.KEY_RIGHT player.keyDownSonicPlayer.KEY_UP//同时执行向右和向上的操作 135 else player.keyDownSonicPlayer.KEY_UP//只执行向上的操作 -5- 以主角为中心划分主角周边的区域以后,斜上方区域响应斜上方的键控,即响应上键的 时候同时响应左键或者右键;右边区域响应右键;上下区域分别响应上和下键,响应按键后 执行对应的触摸按键操作,这样按照区间划分区域具有很好的用户体验。
这的注意的是,主140 角操控的触摸键控一定得对应触摸按键的释放,要不然系统接收用户的触摸响应后对应的逻 辑会一直执行下去。
当 event.getAction状态为 MotionEvent.ACTION_UP 时执行触摸按键的 释放,触摸按键释放的操作如下: if player.keyStatus SonicPlayer.KEY_LEFT SonicPlayer.KEY_LEFT player.keyUpSonicPlayer.KEY_LEFT//释放具体的触摸响应145 触摸屏接口设计模块的改进在于根据主角的中心点细化区域,然后根据划分的区域执行 相应的操作,同时在触摸的响应时增加了计数变量。
4 结论
Android 平台的触摸响应是非常重要的,本身的触摸事件处理机制比较复杂,但是触摸 响应实现时非常简单,只需实现相关方法即可。
应用的触屏响应主要分为菜单界面的触摸响150 应和游戏界面的触摸响应,这两部分的实现机制是相同的,只不过划定触摸范围的方法不同。
在菜单各个界面中主要依靠菜单中各个图片相对屏幕的像素位置来确定触摸范围,然后实现 触屏响应;在游戏界面主要以主角为中心,根据上述的区域范围划分来确定触摸范围和相应 的操作。
在实现触摸方法的过程中,触摸临时计数变量的设置非常必要,起到缓冲的作用, 防止一次触摸键控不释放引发多个界面的响应。
本
论文主要对
Android 平台的触摸响应进行155 了实现和优化,大大增强了用户体验,具有很强的应用价值。
参考文献 References 1 杨丰盛.
Android 应用开发揭秘M.北京:机械工业出版社2010.1. 2 James Steele.Nelson To美.
Android 开发秘籍M.北京:人民邮电出版社2011.8160 3 郝玉龙.
Android 程序设计基础M.北京:清华大学出版社北京交通大学出版社2011.10. 4 李华明.
Android 游戏编程之从零开始M.北京:清华大学出版社2011.10. -6-