AIR Android:使用TouchEvent類(2)
使用TouchEvent類(2)
由于有監(jiān)聽舞臺stage的Touch事件,因此只要觸摸屏幕上任何一點,Touch事件都將觸發(fā),并在觸摸點處畫一個圓。請注意,拖拽的實現(xiàn)并沒有使用Flash開發(fā)者熟悉的startDrag方法,而是Sprite類新增的startTouchDrag方法,該方法代碼如下:
- startTouchDrag(touchPointID:int, lockCenter:Boolean = false,
- bounds:Rectangle = null):void
和startDrag相比,***的區(qū)別是多了一個參數(shù)touchPointID,而touchPointID只在支持觸摸行為的設(shè)備上工作,因此startTouchDrag也只能在觸摸設(shè)備上使用。相對應(yīng)的,結(jié)束拖拽時使用stopTouchDrag方法,代碼如下:
- stopTouchDrag(touchPointID:int):void
在結(jié)束拖拽時也必須輸入touchPointID,以保證是針對同一個觸摸點的動作。
因為模擬器不支持觸摸事件,所以使用觸摸事件的程序必須在真機上運行才能看到效果,如圖3-1所示。
運行TouchEventEx程序,有兩個手指觸摸屏幕上任意兩處,保持觸摸并移動手指,兩個圓將跟隨手指移動。在本例中,程序主類繼承了AppBase,并重寫了init方法,實際上,這將是后面所有實例代碼的模板。在AppBase類中定義了所有程序通用的屬性以及結(jié)構(gòu),完整代碼如下:
- package
- {
- import flash.display.Sprite;
- import flash.display.StageAlign;
- import flash.display.StageScaleMode;
- import flash.events.Event;
- /**
- * 程序基類,定義了舞臺屬性
- */
- public class AppBase extends Sprite
- {
- public function AppBase():void
- {
- //定義舞臺的對齊方式和縮放模式
- stage.align = StageAlign.TOP_LEFT;
- stage.scaleMode = StageScaleMode.NO_SCALE;
- init();
- }
- /**
- * 程序入口,所有程序都重寫init方法,在此添加自己的邏輯
- */
- protected function init():void
- {
- //在這里添加代碼
- }
- }
- }
![]() |
圖3-1 在真機上的運行效果 |
AppBase類位于公用代碼庫library中,定義了舞臺的對齊方式和縮放模式。將scaleMode設(shè)置為StageScaleMode.NO_SCALE,舞臺尺寸即為屏幕的實際尺寸。StageAlign.TOP_LEFT表示舞臺內(nèi)容頂部居左對齊,這兩行代碼的作用是為了讓程序能夠適應(yīng)設(shè)備的屏幕尺寸,從而依據(jù)舞臺對象的stageWidth和stageHeight對界面上的元素進行布局和定位。比如在上一章中,我們讓棋盤在屏幕居中顯示的代碼為:
- grid_container.x = (stage.stageWidth - grid_container.width) / 2;
類AppBase為后面所有的例子程序定義了統(tǒng)一的運行流程,將init方法作為程序初始化的入口,每個例子程序的主類會繼承AppBase類,并且重寫init方法。
使用這樣方式后,一些常用的代碼塊被提取出來放在基類中,被所有的子類共用,同時也提高了程序的靈活性。在后續(xù)的開發(fā)中,如果有需要,可以在AppBase基類中加入更多的方法,這樣所有的程序都可以共享。