近些年來,隨著3G 網(wǎng)絡(luò)的大規(guī)模建設(shè)和智能手機(jī)的迅速普及,移動(dòng)互聯(lián)網(wǎng)時(shí)代已經(jīng)到來。作為Google 推出的一款操作系統(tǒng),Android 自問世以來就吸引了人們廣泛的關(guān)注,受到眾多廠商和開發(fā)者的青睞。Android 是一個(gè)開放、完整、免費(fèi)的手機(jī)平臺(tái),強(qiáng)大的開源特性吸引了越來越多的開發(fā)者,Android的版本如今已由最初的1.1 升級(jí)到最新的4.0,功能越來越強(qiáng)大,用戶體驗(yàn)越來越好,在Android 平臺(tái)上發(fā)布的應(yīng)用產(chǎn)品更加豐富多彩。
Android 平臺(tái)上的應(yīng)用越來越多,人們對(duì)應(yīng)用的要求越來越高。現(xiàn)階段觸屏手機(jī)是趨勢,觸摸是人們與應(yīng)用交互的主流方式,人們對(duì)觸摸的靈敏度,簡易性和方便度要求越來越高,有必要優(yōu)化應(yīng)用的觸摸效果。
1 Android 平臺(tái)的觸摸機(jī)制
一般而言,事件是用戶與UI(圖形界面)進(jìn)行交互的時(shí)候所觸發(fā)的操作。例如在手機(jī)屏幕上觸摸特定的區(qū)域就會(huì)觸發(fā)對(duì)應(yīng)的事件,在Android 中這些事件將被傳送到事件處理器,它是一個(gè)專門接受事件對(duì)象并對(duì)其進(jìn)行翻譯和處理的方法。
在 Android 中用戶事件響應(yīng)是很重要的,用戶消息主要來源于3 種硬件外部設(shè)備:觸摸響應(yīng)(ONTouch系列方法)、按鍵響應(yīng)(onKey系列方法)和軌跡球(Trackball)。不論我們是通過觸摸方式與屏幕交 互,還是使用軌跡球來交互,任何與屏幕相關(guān)的交互都是與屏幕相應(yīng)位置上的視圖控件的交互?,F(xiàn)在 Android 系統(tǒng)的手機(jī)幾乎全是觸屏,基本的按鍵越來越少,觸摸屏響應(yīng)成為發(fā)展的大趨勢,所以在應(yīng)用設(shè)計(jì)的時(shí)候主要考慮觸摸的效果問題,著重優(yōu)化用戶觸摸響應(yīng)。
圖1 Android 平臺(tái)用戶消息處理流程
圖 1 詳細(xì)說明了各種用戶操作被系統(tǒng)捕獲的過程。系統(tǒng)捕獲用戶的響應(yīng)后,由Linux 驅(qū)動(dòng)捕獲用戶的消息,經(jīng)過Android 框架層的AcTIvity Manager 的作用傳遞給Activity中的系統(tǒng)方法,通過執(zhí)行相應(yīng)的系統(tǒng)方法更新View 類,消息傳遞至Application Framework 層,最后調(diào)用Linux 驅(qū)動(dòng),控制著界面的繪制和更新。在Android 工程中,觸摸相關(guān)的接口函數(shù)主要封裝在android.view.KeyEvent 類中,寫觸摸屏操控的時(shí)候首先導(dǎo)入該類的包,在Activity的子類中對(duì)該方法進(jìn)行說明即可。Android 的事件處理機(jī)制相對(duì)簡單,對(duì)于事件處理機(jī)制不必詳細(xì)理解,實(shí)現(xiàn)各種響應(yīng)時(shí)只需具體實(shí)現(xiàn)各個(gè)方法即可,各個(gè)方法的具體實(shí)現(xiàn)在View類中進(jìn)行,下面著重說明 Android 平臺(tái)觸摸響應(yīng)的實(shí)現(xiàn)。
2 Android 平臺(tái)觸摸響應(yīng)的實(shí)現(xiàn)
一般而言在 Android 中,對(duì)于觸摸事件的處理如同UI 事件一樣,主要通過兩種方法來處理,一種是利用View 類的onTouchEvent()方法,一種是實(shí)現(xiàn)OnTouchLiSTener 接口的onTouch()方法。系統(tǒng)中當(dāng)這兩種方法都存在的前提下,系統(tǒng)將會(huì)優(yōu)先采用OnTouchListener接口回調(diào)方法進(jìn)行處理。一般在簡單的 UI 設(shè)計(jì)界面重寫onTouchListener()方法,涉及到多個(gè)Activity 切換時(shí)在方法中實(shí)現(xiàn)Activity 信息保存與跳轉(zhuǎn)即可。
對(duì)于大型應(yīng)用而言,界面狀態(tài)比較復(fù)雜,觸摸響應(yīng)需要詳細(xì)處理,系統(tǒng)提供了一個(gè)專門用于處理用戶觸摸事件的接口函數(shù)onTouchEvent()。實(shí)際開發(fā)過程中只需先聲明此接口函數(shù),然后在主View類中重寫該函數(shù)實(shí)現(xiàn)具體的觸摸效果即可。下面是接口函數(shù)的聲明:
觸屏監(jiān)聽方法中只有一個(gè)MotionEvent event 參數(shù),此類的實(shí)例中保存了玩家觸屏的各種動(dòng)作,常見的有:按下動(dòng)作、移動(dòng)動(dòng)作、多點(diǎn)觸屏、屏幕壓力等,在此類中定義了很多動(dòng)作的靜態(tài)常量值,通過 event.getAction()方法獲取玩家的動(dòng)作與所需動(dòng)作常量值進(jìn)行匹配。