AIR Android:使用TouchEvent类(1)

移动开发 Android
处理用户交互,本模块主要介绍了多点触摸相关功能的用法,包括触摸和手势。处理用户交互是AIR Android开发的基础部分,只有设计合理、用户操作符合逻辑的交互,才能增强程序的用户体验。因此,熟练掌握常见的交互手法至关重要。本文为大家介绍使用TouchEvent类。

处理触摸事件

和处理其他事件一样,可以对舞台上的元件监听触摸事件,然后编写事件处理函数。触摸事件有哪些类型?如何使用?它们和鼠标事件又有什么区别?学完本节大家便会得到答案。

使用TouchEvent类(1)

所有的触摸动作都将产生TouchEvent类型的事件对象。TouchEvent类位于flash.events包中,所有的Touch事件类型都被定义为它的静态常量,如表3-1所示。

表3-1 TouchEvent类型

 

在TouchEvent类中,除了父类Event的属性和方法外,还定义了几个和触摸动作相关的实例属性,说明如下。

stageX和stageY:表示对应的触摸点在屏幕上的全局坐标。

pressure:取值为0.0~1.0,表示触摸点处的屏幕压力。如果设备不支持这个功能,那么其值将总为1.0。

sizeX和sizeY:分别对应触摸点接触区域的宽和高。

touchPointID:触摸点的唯一标识,是整型数据。

在处理触摸事件时,touchPointID是经常使用的一个参数,用来标识触摸事件。触摸操作可能有多个触摸点,比如两个手指同时触摸屏幕,TOUCH_BEGIN事件将发生两次,产生的TouchEvent分别对应不同位置的触摸点。为了区分触摸点,AIR运行时会为每个触摸点分配一个唯一的标识,即touchPointID。

当TOUCH_BEGIN事件第一次发生时,AIR运行时会从0开始分配touchPointID给每个TouchEvent,直到数目超出了系统所能支持的最大触摸点数,超出范围的触摸事件将被忽略。Android设备一般只支持两个触摸点,也就是说TouchEvent对象的touchPointID的值只可能是0或1。每个触摸动作结束时,对应的touchPointID被回收,供新的触摸点使用。

下面用一个TouchEventEx的例子演示TOUCH_BEGIN和TOUCH_END的用法。每当一个或两个手指触摸屏幕时,程序会在触摸点附近画一个圆,并开始拖拽这个圆,直到TOUCH_END事件发生,拖拽结束。程序的主类Main.as的代码如下:

  1. package  
  2. {  
  3.  import flash.display.Graphics;  
  4.  import flash.display.Sprite;  
  5.  import flash.events.TouchEvent;  
  6.  import flash.ui.Multitouch;  
  7.  import flash.ui.MultitouchInputMode;  
  8.  //AppBase是一个基础类,定义了程序的基本属性  
  9.  public class Main extends AppBase  
  10.  {    
  11.   override protected function init():void  
  12.   {  
  13.    //判断是否支持TouchEvent  
  14.    if ( Multitouch.supportsTouchEvents )  
  15.    {  
  16.     //设置交互模式为处理触摸动作  
  17.     Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;  
  18.     //监听舞台的TOUCH_BEGIN和TOUCH_END事件  
  19.     stage.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);  
  20.     stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd);  
  21.    }     
  22.   }  
  23.   //创建可视对象,并画圆  
  24.   private function createCircle():Sprite  
  25.   {  
  26.    var box:Sprite = new Sprite();  
  27.    var g:Graphics = box.graphics;  
  28.    g.beginFill(0x808888);  
  29.    g.drawCircle(0, 0, 30);  
  30.    g.endFill();  
  31.    return box;  
  32.   }    
  33.   //TOUCH_BEGIN事件处理函数  
  34.   private function onTouchBegin(e:TouchEvent):void  
  35.   {  
  36.    //在触摸点处添加一个圆  
  37.    var box:Sprite = createCircle();  
  38.    addChild(box);  
  39.    //将元件移到触摸点对应的舞台坐标处  
  40.    box.x = e.stageX;  
  41.    box.y = e.stageY;     
  42.    //调用可视对象的startTouchDrag,开始拖拽元件  
  43.    box.startTouchDrag(e.touchPointID);  
  44.   }  
  45.   //TOUCH_END事件处理函数  
  46.   private function onTouchEnd(e:TouchEvent):void  
  47.   {  
  48.    //调用stopTouchDrag结束拖拽  
  49.    e.target.stopTouchDrag(e.touchPointID);  
  50.   }    
  51.  }   
  52. }
责任编辑:闫佳明 来源: book.51cto.com
相关推荐

2013-05-14 11:04:58

AIR AndroidTouchEvent类

2013-05-14 10:13:52

Android开发主类Main

2013-05-14 10:16:35

Android开发主类Main

2013-05-14 10:23:31

Android开发主类Main

2013-05-14 09:50:44

Android开发Flash Build

2013-05-09 13:45:47

2013-05-03 15:17:59

Android开发Android SDK

2013-05-14 11:18:24

AIR AndroidSwipe手势

2011-06-16 10:25:29

AndroidAIR

2013-05-14 10:41:31

2013-05-14 09:57:37

2013-05-14 10:37:10

AIR Android设置访问权限

2013-05-14 11:16:26

AIR Android旋转手势

2013-05-14 10:27:46

Android开发设置程序属性

2013-05-14 10:39:27

AIR Android打包APK文件

2013-05-14 10:56:45

AIR Android多点触摸

2011-11-17 17:04:43

AdobeAIRAndroid

2013-05-14 10:10:28

Android开发棋子类Grid

2013-05-14 10:05:10

Android开发游戏设计

2012-03-09 13:26:53

点赞
收藏

51CTO技术栈公众号