日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
AIRAndroid:放大與縮小手勢

放大與縮小手勢(1)

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

 
圖3-2 放縮手勢

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

下面的實例程序GestureZoom演示了如何使用ZOOM手勢來控制圖片的放縮。對loader對象添加手勢監(jiān)聽器,事件響應函數(shù)根據(jù)手勢動作,實現(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對象加載圖片  
  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.  //判斷設備是否支持手勢事件  
  28.  if ( Multitouch.supportsGestureEvents )  
  29.  {  
  30.  //對loader對象添加手勢事件監(jiān)聽器  
  31.  loader.addEventListener(TransformGestureEvent.GESTURE_ZOOM, onZoom);  
  32.  }  
  33.  }  
  34.  //響應放縮手勢  
  35.  private function onZoom(e:TransformGestureEvent):void  
  36.  {  
  37.   //記錄下手勢作用點的位置,采用loader對象中的本地坐標  
  38.   var p:Point = new Point( e.localX, e.localY );  
  39.   //將坐標轉換為父級容器的本地坐標  
  40.   var parent_p:Point = this.globalToLocal(loader.localToGlobal(p));  
  41.   //對loader對象做放縮處理  
  42.   loader.scaleX *= e.scaleX;  
  43.   loader.scaleY *= e.scaleY;  
  44.   //loader對象縮放后,p點在loader對象中的坐標沒有變,但在父級容器中的坐標已發(fā)生變化,因此要//重新計算  
  45.   var parent_p2:Point = this.globalToLocal(loader.localToGlobal(p));  
  46.   //移動loader,使得點p在父級容器的坐標保持不變  
  47.   loader.x += (parent_p.x - parent_p2.x);  
  48.   loader.y += (parent_p.y - parent_p2.y);  
  49.  }  

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

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

3.3.1 放大與縮小手勢(2)

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

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

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

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

如果只是簡單地對loader對象做放縮處理,會帶來一個問題,那就是每次都是以loader的原點為中心點進行縮放。而符合邏輯的做法,應該是以手勢動作的作用點為中心進行縮放。也就是說,要將手勢動作的作用點設置為loader對象的注冊點。雖然ActionScript并沒有提供修改可視元件注冊點的功能,但可以模擬這個行為。整個過程并不難,關鍵在于坐標轉換,步驟如下:

步驟1 記錄手勢作用點在loader對象中的本地坐標,記為點p,它將是新的“注冊點”。

步驟2 以loader對象的父級容器為參照物,計算出點p在父級容器中的本地坐標,記為點parent_p。

步驟3 對loader對象進行縮放。

步驟4 計算縮放后點p在父級容器中的本地坐標,記為點parent_p2。

步驟5 移動loader對象的坐標,讓點p在父級容器中的坐標保持不變。

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

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

請注意,程序GestureZoom的屏幕朝向設置為橫屏模式,在程序描述文件中對應的設置項如下:

 
 
 
 
  1. landscape 

到這里,一個簡單的圖片放大鏡就完工了。

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


新聞標題:AIRAndroid:放大與縮小手勢
文章URL:http://www.dlmjj.cn/article/dpjcjhh.html