当前位置:首页 > 嵌入式 > 嵌入式软件
[导读] 0 引言 近些年来,随着3G 网络的大规模建设和智能手机的迅速普及,移动互联网时代已经到来。作为Google 推出的一款操作系统,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进行触摸释放的处理,及时释放当前的触摸响应。
3 Android 平台触摸响应的优化

值得注意的是,上面触摸响应MotionEvent.ACTION_DOWN 中,特意定义了一个临时触摸计数变量keyCount,当计数变量加到一定的程度时候才执行触摸响应。这样处理能有效地防止连续触摸响应,触摸不释放而直接跳到下一个状态,触摸变量的设置在各个界面跳转过程中尤其是游戏菜单中各界面跳转中是很有必要的。

触摸响应中除了各个菜单界面的响应以外还有一个重要的响应就是游戏中对主角的操控。主游戏界面的触摸响应原理和菜单界面是一致的,不同的是触摸判断范围的选取有差异,菜单界面各个触摸范围是固定的,而游戏界面触摸区域的划定是动态的。由于在角色扮演等游戏中主角是核心人物,因此对主角的操控的触摸响应显得尤其重要,进行触摸设计的时候一般以主角为中心进行设计,以主角的坐标作为基本点来判断。

图3 主角控制时区域的划分

图 3 所示的是主角移动时候的区域划分,以水平和垂直坐标轴的交点作为主角的坐标中心点,将主角周边的区域划分为10 个区域,触点在区域9-10 的时候方向向右,对称的区域5-6 的时候方向向左,区域7-8 的时候方向向下。对于区域1-4 进行进一步的划分,2-3 区域方向向上,只响应向上的操作,区域1 同时响应右键和上键,区域4 同时响应左键和上键。这样对区域进行细化符合实际情况,区域1 和区域4 的角度范围可以根据实际情况微调。


以主角为中心划分主角周边的区域以后,斜上方区域响应斜上方的键控,即响应上键的时候同时响应左键或者右键;右边区域响应右键;上下区域分别响应上和下键,响应按键后执行对应的触摸按键操作,这样按照区间划分区域具有很好的用户体验。这的注意的是,主角操控的触摸键控一定得对应触摸按键的释放,要不然系统接收用户的触摸响应后对应的逻辑会一直执行下去。当event.getAction()状态为MotionEvent.ACTION_UP 时执行触摸按键的释放,触摸按键释放的操作如下:

if ((player.keyStatus & SonicPlayer.KEY_LEFT) == SonicPlayer.KEY_LEFT)
{player.keyUp(SonicPlayer.KEY_LEFT);}//释放具体的触摸响应
触摸屏接口设计模块的改进在于根据主角的中心点细化区域,然后根据划分的区域执行相应的操作,同时在触摸的响应时增加了计数变量。

4 结论

Android 平台的触摸响应是非常重要的,本身的触摸事件处理机制比较复杂,但是触摸响应实现时非常简单,只需实现相关方法即可。应用的触屏响应主要分为菜单界面的触摸响应和游戏界面的触摸响应,这两部分的实现机制是相同的,只不过划定触摸范围的方法不同。

在菜单各个界面中主要依靠菜单中各个图片相对屏幕的像素位置来确定触摸范围,然后实现触屏响应;在游戏界面主要以主角为中心,根据上述的区域范围划分来确定触摸范围和相应的操作。在实现触摸方法的过程中,触摸临时计数变量的设置非常必要,起到缓冲的作用,防止一次触摸键控不释放引发多个界面的响应。本论文主要对Android 平台的触摸响应进行了实现和优化,大大增强了用户体验,具有很强的应用价值。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

罗德与施瓦茨与SmartViser携手开发了一种用于测试符合欧盟销售的智能手机和平板电脑的新Energy Efficiency Index(EEI)标签法规的解决方案。该解决方案的核心是R&S CMX500,这是...

关键字: 智能手机 Android iOS

(全球TMT2023年8月24日讯)2023年8月23日,时值实时3D引擎Unity在华设立合资公司Unity中国一周年之际,Unity中国正式推出Unity中国版引擎——团结引擎。Unity全球CEO John Ri...

关键字: UNITY CE Android 开发者

报告显示:全球电商 App 获客花费接近50亿美元 北京2023年8月23日 /美通社/ -- 全球营销衡量与体验管理平台 AppsFlyer 近日发布《2023 电商 App 营销现状报告》。尽管面临全球经...

关键字: APPS BSP iOS Android

数字机顶盒是一种数字技术下的多媒体娱乐中心,可以实现电视节目接收、播放、存储、网络应用等多种功能。随着科技的发展,数字机顶盒的设计方案也在不断进步和优化。本文将介绍数字机顶盒设计的几种实现方案。

关键字: 数字机顶盒 Android Linux

21ic 近日获悉,原小米 9 号创始员工李明在社交媒体平台公布了旗下首款产品乐天派桌面机器人,为全球首款 Android 桌面机器人,面向极客和发烧友的 AI + 机器人。据悉,李明两个月前宣布创业并进军 AI 领域,...

关键字: 小米 Android 桌面机器人 AI

新一代人工智能的发展,是国家层面的战略大协作。由科技部主导,共15个国家部门构成的新一代人工智能发展规划推进办公室,着力推进项目、基地、人才统筹布局,打造国家级专家库,成立新一代人工智能战略咨询委员会。很多时候企业拥有重...

关键字: 人工智能 自动化 平台

尽管安装增长放缓,全球游戏 App 获客花费仍高达 267 亿美元 经济低迷导致 2023 游戏 App 营销优先考虑收入指标,用户增长次之 北京2023年3月9日 /美通社/ -- 今天,全球营销衡量与体验管理平台...

关键字: APPS iOS Android BSP

量子计算领域的新里程碑,来了! 谷歌科学家证明,通过增加量子比特的数量,就能降低量子计算的错误率。

关键字: 谷歌 Android Windows

「卫星通讯」正在被普及到每一台智能手机当中。普及的动机并非是消费市场的一个刚需,其实更像是将差异化的功能「抹平」成一个标配。时下,支持「卫星通讯」功能的智能手机只有苹果的 iPhone 14 系列与华为的 Mate 50...

关键字: 卫星通讯 Android 智能手机 iPhone

Android是Google开发的操作系统,支持多种指令集架构 (ISA),包括Arm和x86,多数使用Android的设备都采用Arm架构芯片组。新兴RISC-V架构是免费开放指令集架构,任何人都可用它设计芯片,且无需...

关键字: 谷歌 Android RISC-V架构
关闭
关闭