偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

AIR Android:放大與縮小手勢(shì)

移動(dòng)開(kāi)發(fā) Android
處理用戶交互,本模塊主要介紹了多點(diǎn)觸摸相關(guān)功能的用法,包括觸摸和手勢(shì)。處理用戶交互是AIR Android開(kāi)發(fā)的基礎(chǔ)部分,只有設(shè)計(jì)合理、用戶操作符合邏輯的交互,才能增強(qiáng)程序的用戶體驗(yàn)。因此,熟練掌握常見(jiàn)的交互手法至關(guān)重要。本文為大家介紹放大與縮小手勢(shì)。

放大與縮小手勢(shì)(1)

放大與縮小手勢(shì)對(duì)應(yīng)TransformGestureEvent. GESTURE_ZOOM事件類型,使用時(shí)要求兩個(gè)手指觸摸屏幕,同時(shí)向外或向內(nèi)做放縮動(dòng)作,如圖3-2所示。

 
圖3-2 放縮手勢(shì)

放縮手勢(shì)操作起來(lái)簡(jiǎn)單且直觀,在觸摸屏設(shè)備上的應(yīng)用范圍很廣,比如瀏覽網(wǎng)頁(yè)時(shí)控制頁(yè)面上的字體大小,查看地圖時(shí)控制地圖的縮放級(jí)別等。

下面的實(shí)例程序GestureZoom演示了如何使用ZOOM手勢(shì)來(lái)控制圖片的放縮。對(duì)loader對(duì)象添加手勢(shì)監(jiān)聽(tīng)器,事件響應(yīng)函數(shù)根據(jù)手勢(shì)動(dòng)作,實(shí)現(xiàn)放大或縮小加載的圖片。主程序Main.as的代碼如下:

 

  1. package  
  2. {  
  3. import flash.display.Loader;  
  4. import flash.display.Sprite;   
  5. import flash.events.Event;  
  6. import flash.events.TransformGestureEvent;  
  7. import flash.geom.Point;  
  8. import flash.net.URLRequest;  
  9.    
  10. public class Main extends AppBase  
  11. {  
  12. private var loader:Loader;  
  13.    
  14.  override protected function init():void  
  15.  {  
  16.   //使用Loader對(duì)象加載圖片  
  17.   loader = new Loader();  
  18.   loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);  
  19.   addChild(loader);  
  20.   //加載目錄下的圖片  
  21.   loader.load( new URLRequest("dog.jpg") );  
  22.  }    
  23.  //處理加載事件  
  24.  private function onLoadComplete(e:Event):void  
  25.  {  
  26.   loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoadComplete);  
  27.  //判斷設(shè)備是否支持手勢(shì)事件  
  28.  if ( Multitouch.supportsGestureEvents )  
  29.  {  
  30.  //對(duì)loader對(duì)象添加手勢(shì)事件監(jiān)聽(tīng)器  
  31.  loader.addEventListener(TransformGestureEvent.GESTURE_ZOOM, onZoom);  
  32.  }  
  33.  }  
  34.  //響應(yīng)放縮手勢(shì)  
  35.  private function onZoom(e:TransformGestureEvent):void  
  36.  {  
  37.   //記錄下手勢(shì)作用點(diǎn)的位置,采用loader對(duì)象中的本地坐標(biāo)  
  38.   var p:Point = new Point( e.localX, e.localY );  
  39.   //將坐標(biāo)轉(zhuǎn)換為父級(jí)容器的本地坐標(biāo)  
  40.   var parent_p:Point = this.globalToLocal(loader.localToGlobal(p));  
  41.   //對(duì)loader對(duì)象做放縮處理  
  42.   loader.scaleX *= e.scaleX;  
  43.   loader.scaleY *= e.scaleY;  
  44.   //loader對(duì)象縮放后,p點(diǎn)在loader對(duì)象中的坐標(biāo)沒(méi)有變,但在父級(jí)容器中的坐標(biāo)已發(fā)生變化,因此要//重新計(jì)算  
  45.   var parent_p2:Point = this.globalToLocal(loader.localToGlobal(p));  
  46.   //移動(dòng)loader,使得點(diǎn)p在父級(jí)容器的坐標(biāo)保持不變  
  47.   loader.x += (parent_p.x - parent_p2.x);  
  48.   loader.y += (parent_p.y - parent_p2.y);  
  49.  }  

 

在本例中,使用Loader對(duì)象加載程序目錄下的圖片。加載完成后,對(duì)loader對(duì)象添加手勢(shì)事件監(jiān)聽(tīng)器,代碼如下:

  1. if ( Multitouch.supportsGestureEvents )  
  2. {  
  3.  loader.addEventListener(TransformGestureEvent.GESTURE_ZOOM, onZoom);  
  4. }

3.3.1 放大與縮小手勢(shì)(2)

由于Multitouch類的inputMode屬性默認(rèn)為處理手勢(shì)事件,因此無(wú)需更改交互模式即可處理手勢(shì)事件。使用手勢(shì)事件之前,對(duì)Multitouch類的supportsGestureEvents屬性做判斷是一個(gè)好習(xí)慣。事實(shí)上,僅僅做這一個(gè)判斷并不能確保設(shè)備就一定會(huì)支持所有的手勢(shì)。要做到萬(wàn)無(wú)一失,還需要檢查Multitouch的supportedGestures屬性,檢查的過(guò)程如下:

  1. var index:int = -1;  
  2. if ( Multitouch.supportedGestures != null )  
  3. {  
  4. index = Multitouch.supportedGestures.indexOf(TransformGestureEvent.GESTURE_ZOOM);  
  5. }  
  6. if(Multitouch.supportsGestureEvents && index != -1 )  
  7. {  
  8. //添加其他代碼  

supportedGestures是一個(gè)Vector類型的數(shù)組,包含了設(shè)備支持的所有手勢(shì)類型。每個(gè)元素代表一個(gè)事件類型,如果設(shè)備任何一個(gè)手勢(shì)都不支持,supportedGestures的值為null。因此,要檢測(cè)設(shè)備是否支持某個(gè)手勢(shì),可以使用Vector的indexOf方法進(jìn)行查找,確保代碼在設(shè)備上能夠正確運(yùn)行。

處理GESTURE_ZOOM 事件時(shí),使用TransformGestureEvent 對(duì)象的scaleX與scaleY,即可分別獲取水平方向與垂直方向的縮放值。如果手指向外滑動(dòng),表示放大,對(duì)應(yīng)的scaleX與scaleY值大于1,反之小于1。因此,用以下兩行代碼就可以實(shí)現(xiàn)放縮控制:

  1. loader.scaleX *= e.scaleX;  
  2. loader.scaleY *= e.scaleY; 

如果只是簡(jiǎn)單地對(duì)loader對(duì)象做放縮處理,會(huì)帶來(lái)一個(gè)問(wèn)題,那就是每次都是以loader的原點(diǎn)為中心點(diǎn)進(jìn)行縮放。而符合邏輯的做法,應(yīng)該是以手勢(shì)動(dòng)作的作用點(diǎn)為中心進(jìn)行縮放。也就是說(shuō),要將手勢(shì)動(dòng)作的作用點(diǎn)設(shè)置為loader對(duì)象的注冊(cè)點(diǎn)。雖然ActionScript并沒(méi)有提供修改可視元件注冊(cè)點(diǎn)的功能,但可以模擬這個(gè)行為。整個(gè)過(guò)程并不難,關(guān)鍵在于坐標(biāo)轉(zhuǎn)換,步驟如下:

步驟1 記錄手勢(shì)作用點(diǎn)在loader對(duì)象中的本地坐標(biāo),記為點(diǎn)p,它將是新的“注冊(cè)點(diǎn)”。

步驟2 以loader對(duì)象的父級(jí)容器為參照物,計(jì)算出點(diǎn)p在父級(jí)容器中的本地坐標(biāo),記為點(diǎn)parent_p。

步驟3 對(duì)loader對(duì)象進(jìn)行縮放。

步驟4 計(jì)算縮放后點(diǎn)p在父級(jí)容器中的本地坐標(biāo),記為點(diǎn)parent_p2。

步驟5 移動(dòng)loader對(duì)象的坐標(biāo),讓點(diǎn)p在父級(jí)容器中的坐標(biāo)保持不變。

第5步操作的原理是:點(diǎn)p是loader對(duì)象的本地坐標(biāo),因此對(duì)loader對(duì)象進(jìn)行縮放并不影響點(diǎn)p的值,但點(diǎn)p相對(duì)父級(jí)容器而言位置發(fā)生了變化,所以,根據(jù)縮放前后點(diǎn)p在父級(jí)容器中的位移,更改loader對(duì)象的坐標(biāo),就能夠讓點(diǎn)p在父級(jí)容器的坐標(biāo)保持不變,從而達(dá)到了更改loader對(duì)象注冊(cè)點(diǎn)的目的。起決定性作用的兩行代碼如下:

  1. loader.x += (parent_p.x - parent_p2.x);  
  2. loader.y += (parent_p.y - parent_p2.y);

請(qǐng)注意,程序GestureZoom的屏幕朝向設(shè)置為橫屏模式,在程序描述文件中對(duì)應(yīng)的設(shè)置項(xiàng)如下:

  1. <aspectRatio>landscape</aspectRatio> 

到這里,一個(gè)簡(jiǎn)單的圖片放大鏡就完工了。

注意 程序中使用的圖片放在bin目錄中,和其他文件一起被包含在APK文件中,與主SWF文件位于同一目錄結(jié)構(gòu),因此使用相對(duì)路徑就可以直接加載。

責(zé)任編輯:閆佳明 來(lái)源: book.51cto.com
相關(guān)推薦

2013-05-14 11:18:24

AIR AndroidSwipe手勢(shì)

2013-05-14 11:16:26

AIR Android旋轉(zhuǎn)手勢(shì)

2017-05-03 16:36:32

Android圖片動(dòng)畫

2013-05-03 15:17:59

Android開(kāi)發(fā)Android SDK

2011-06-16 10:25:29

AndroidAIR

2013-05-14 11:08:23

AIR Android觸摸事件鼠標(biāo)事件

2013-05-14 09:57:37

2013-05-14 10:27:46

Android開(kāi)發(fā)設(shè)置程序?qū)傩?/a>

2013-05-14 10:39:27

AIR Android打包APK文件

2013-05-14 10:37:10

AIR Android設(shè)置訪問(wèn)權(quán)限

2013-05-14 10:56:45

AIR Android多點(diǎn)觸摸

2009-05-30 09:33:10

Palm PreWebOS移動(dòng)OS

2013-05-14 09:50:44

Android開(kāi)發(fā)Flash Build

2013-05-14 10:05:10

Android開(kāi)發(fā)游戲設(shè)計(jì)

2013-05-14 10:10:28

Android開(kāi)發(fā)棋子類Grid

2013-05-14 11:01:34

AIR AndroidTouchEvent類

2013-05-14 11:04:58

AIR AndroidTouchEvent類

2012-03-09 13:26:53

2013-05-14 09:54:27

Android開(kāi)發(fā)開(kāi)源開(kāi)發(fā)環(huán)境

2013-05-14 10:16:35

Android開(kāi)發(fā)主類Main
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)