AIR Android:關(guān)于多點(diǎn)觸摸
處理用戶交互
目前,觸摸屏已經(jīng)成為移動(dòng)設(shè)備的標(biāo)配,Android設(shè)備也不例外。因此,對(duì)開發(fā)者來說,處理用戶交互在很大程度上也就是處理手與觸摸屏的交互。
由于手指很靈活,在一塊觸摸屏上可以產(chǎn)生多種多樣的操作方式。比如,單個(gè)手指就有按下、移動(dòng)、快速單擊、長按等操作;兩個(gè)手指可以做旋轉(zhuǎn)、放縮手勢(shì)等,這些手勢(shì)引發(fā)的就是多點(diǎn)觸摸事件。如何在AIR中處理多點(diǎn)觸摸事件,正是本章要介紹的內(nèi)容。
關(guān)于多點(diǎn)觸摸
在ActionScript 3.0中按照交互行為產(chǎn)生的事件類型,將多點(diǎn)觸摸動(dòng)作分為兩類:觸摸和手勢(shì)。
觸摸動(dòng)作指一個(gè)或多個(gè)手指觸摸屏幕的動(dòng)作,引發(fā)的事件對(duì)象為TouchEvent類型。手勢(shì)往往由一系列的觸摸動(dòng)作組成,以代表某個(gè)特定意義,引發(fā)的事件對(duì)象為GestureEvent類型。
由于觸摸和手勢(shì)存在包含關(guān)系,在運(yùn)行期間程序無法同時(shí)檢測(cè)這兩類事件,為此ActionScript 3.0引入了Multitouch類,用來管理程序的觸摸交互模式。如果要檢測(cè)觸摸事件,必須通過下面的代碼改變檢測(cè)方式:
- //導(dǎo)入相應(yīng)的類
- import flash.ui.Multitouch;
- import flash.ui.MultitouchInputMode;
- …
- //檢測(cè)系統(tǒng)是否支持觸摸事件
- if ( Multitouch.supportsTouchEvents )
- {
- //設(shè)置多點(diǎn)觸摸的模式為觸摸
- Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
- }
在處理觸摸事件之前,建議開發(fā)者先檢測(cè)Multitouch 類的靜態(tài)屬性supportsTouchEvents 是否為true,即檢測(cè)當(dāng)前設(shè)置是否支持觸摸事件,然后再進(jìn)行后面的操作。如果設(shè)備不支持觸摸事件,可以用其他方式來處理交互,這樣就可以兼容多種設(shè)備。
intputMode是Multitouch類的另一個(gè)靜態(tài)屬性,表示當(dāng)前程序的觸摸交互模式,有3個(gè)可選值,為MultitouchInputMode類的靜態(tài)常量:
MultitouchInputMode.NONE(不處理觸摸和手勢(shì)事件)
MultitouchInputMode.TOUCH_POINT(處理觸摸事件)
MultitouchInputMode.GESTURE(默認(rèn)值,處理手勢(shì)事件)
在AIR中默認(rèn)的交互模式為MultitouchInputMode.GESTURE,即處理手勢(shì)事件。因此,要使用觸摸事件時(shí),必須將inputMode修改為MultitouchInputMode.TOUCH_POINT。
設(shè)置好交互模式后,就可以像處理其他事件一樣,對(duì)舞臺(tái)上的元件添加相應(yīng)的事件監(jiān)聽器來響應(yīng)用戶的操作。
提示 不管是在哪一種觸摸交互模式下,鼠標(biāo)事件都可以正常使用。