国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

簡介Windows Mobile 6.5 Gesture API

移動開發
在windows mobile 6.5中,微軟終于添加進了對于Gesture(手勢)的支持。同時,在Gesture的基礎上,也具備了一些物理引擎的支持。在這個系列文章中,我將給大家介紹Windows Mobile 6.5的這一新特性。

所謂Gesture(手勢)既用來描述用戶使用手指或者觸筆在控件上進行一個短的具有一定方向的移動操作。大多數的Gesture都是基于手指的落下和抬起(WM_LBUTTONDOWN & WM_LBUTTONUP)這個操作組合(當然雙擊的操作是個特例,它使用兩次這個組合)。手勢在這個手指的落下和抬起的操作組合之上加入了一些其他信息,例如方向,位置,角度等等。Windows Mobile支持如下的手勢:Gesture描述

Tap 就像是鼠標的單擊事件。

手指在特定的時間和距離間隔上落下和抬起后,應用程序會接收到一個GID_SELECT的Gesture消息。同時,有可能在WM_LBUTTONDOWN和GID_SELECT消息之間產生多個WM_MOUSEMOVE消息.

Double Tap 相當于鼠標的左鍵雙擊。

用戶在特定的時間間隔和距離上進行雙擊操作,應用程序會獲得GID_DOUBLESELECT消息。

Hold 用戶可以按下并保持住。

用戶按下并保持一定時間,同時手指在一個特定的距離范圍內,應用程序將會收到GID_HOLD消息 。在手指抬起或者一個設定的時間間隔之后,將會伴隨一個GID_END消息。

Flick 用戶在屏幕上快速的滑動手指一段距離。

應用程序將會收到一個或者多個GID_PAN消息,然后是GID_SCROLL消息(手指抬起后),在最后 ,將收到GID_END消息。

Pan 用戶按下并保持在屏幕上,然后拖動一頓距離。

應用程序將會收到一個或者多個GID_PAN消息。 當手指抬起后,將會收到一個GID_END消息。

在Hold之后也可以接著產生Pan的消息。

很遺憾,在這里我們沒有看到多點觸摸的支持。或許在不久的將來,在Windows Mobile 7中,我們期望能看到多點觸摸的支持。

默認支持Gesture的控件

在上一小節中我們講到了Windows Mobile 6.5已經支持的手勢種類。那么如果我們要使用Gesture的話,哪些控件是支持手勢的呢?主要有以下幾種:

TabControl, Listbox, Listview, ComboBox, Treeview以及Webbrowser控件。

這六種控件是天然支持手勢的,我們不需要編寫一行的代碼(WebBrowser控件除外),他們在必要的時候就可以自動支持手勢。下面我附上的例子中,你可以看到,我用TabControl的tabPage來分別包含了一個Listbox, Listview, ComboBox和Treeview。然后給這些控件填充一些數據以便測試。您可以將該工程編譯后分別部署到Windows Mobile 6以及Windows Mobile 6.5的真實設備/模擬器上(注意,該工程需要.NET Compact Framework 3.5的支持)。您會發現,同樣的代碼在Windows Mobile 6.5上已經天然支持手勢了,不過在Windows Mobile 6.0上并不支持任何手勢。

這里需要特別指出的是,對于WebBrowser控件來說,在.NET Compact Framework中無法直接支持手勢。必須在C++中通過設定HS_NOSELECTION來建立DISPLAYCLASS。

GestureDemo1.zip(測試工程源代碼) (31.51 kb)

下面是該工程在Windows Mobile 6.5上運行的狀態:

使用Managed Gesture API

在前面我們提到了微軟針對Windows Mobile的Gesture提供了5種不同的手勢。他們分別是Tap, Double Tap, Hold, Flick, Pan。如果您使用C++來開發Windows Mobile 6.5上的應用程序,那么請參考MSDN上關于Windows Mobile上Gesture的參考文檔 http://msdn.microsoft.com/en-us/library/ee220917.aspx。 如果您是使用托管代碼,那么您可以使用由微軟的兩位工程師(Alex Yakhnin, Ron Buckton)所封裝的針對托管代碼的API(http://code.msdn.microsoft.com/gestureswm)。

在這套API中,分別針對這5種手勢做了封裝,不過名字略有改動:Tap改為Select; Double Tap改為DoubleSelect; Flick改為Scroll。 Hold和Pan沒有改變。這套API的用法很簡單,實例化一個他們封裝好的手勢識別器組件,然后給它指定要監控的對象。最后,加上針對這5種手勢的事件處理函數即可。如下代碼所示:

  1. private void InitGestureRecognizer() 
  2.  
  3.  
  4. gestureRecognizer1 = new GestureRecognizer(this.panel1); 
  5.  
  6. //You can also set the TargetControl property 
  7.  
  8. //gestureRecognizer1.TargetControl = this.panel1; 
  9.  
  10. gestureRecognizer1.Hold += new EventHandler(gestureRecognizer1_Hold); 
  11.  
  12. gestureRecognizer1.Select += new EventHandler(gestureRecognizer1_Select); 
  13.  
  14. gestureRecognizer1.DoubleSelect += new EventHandler(gestureRecognizer1_DoubleSelect); 
  15.  
  16. gestureRecognizer1.Pan += new EventHandler(gestureRecognizer1_Pan); 
  17.  
  18. gestureRecognizer1.Scroll += new EventHandler(gestureRecognizer1_Scroll); 
  19.  
  20.  
  21. void gestureRecognizer1_Scroll(object sender, GestureScrollEventArgs e) 
  22.  
  23.  
  24. label1.Text = e.Kind.ToString() + ": " + e.State + ", (" + e.X + ", " + e.Y + "), d=" + e.ScrollDirection + "a=" + e.Angle + "v=" + e.Velocity; 
  25.  
  26.  
  27. void gestureRecognizer1_Pan(object sender, GestureEventArgs e) 
  28.  
  29.  
  30. label1.Text = e.Kind.ToString() + ": " + e.State + ", (" + e.X + ", " + e.Y + ")"; 
  31.  
  32.  
  33. void gestureRecognizer1_DoubleSelect(object sender, GestureEventArgs e) 
  34.  
  35.  
  36. label1.Text = e.Kind.ToString() + ": " + e.State + ", (" + e.X + ", " + e.Y + ")"; 
  37.  
  38.  
  39. void gestureRecognizer1_Select(object sender, GestureEventArgs e) 
  40.  
  41.  
  42. label1.Text = e.Kind.ToString() + ": " + e.State + ", (" + e.X + ", " + e.Y + ")"; 
  43.  
  44.  
  45. void gestureRecognizer1_Hold(object sender, GestureEventArgs e) 
  46.  
  47.  
  48. label1.Text = e.Kind.ToString() + ": " + e.State + ", (" + e.X + ", " + e.Y + ")"; 
  49.  

該示例代碼是在窗體上放了兩個控件: Panel1用來捕獲手勢事件;label1用來顯示當前手勢的一些參數。 運行狀況如下圖所示:

 

 

最后一部分,是demo程序的源代碼:GestureDemo2.zip (58.05 kb)

看到了吧,在Windows Mobile 6.5中,我們要給我們的程序加上手勢的支持是如此的簡單方便。好了,本小節就到這里,在下一節中我們將討論手勢和動畫。

使用動畫引擎

手勢的意義

在前面我們學會了如何使用托管的Mobile Gesture API來捕獲用戶的手勢:Tap, Double Tap, Hold, Flick, Pan.到這里就結束了么?沒有,我們需要看到手勢背后的意義。我們的程序應該通過這些通用的手勢消息來判斷用戶的操作意圖,來了解用戶想要做什么事情,從而做出進一步的響應:

Tap:點擊,即用戶用手指敲擊某一個控件。通常需要觸發某一個操作(按鈕類控件),或者是意味著在眾多控件/內容中選中該控件。

Double Tap:雙擊,即用戶快速的點擊兩次該控件。其實這是用戶從PC時代帶過來的一個操作,在電腦上我們經常會雙擊鼠標來打開某個文件夾或者選中某些內容等等。所以大家很自然的把它延伸到了Windows phone的操作習慣上。我們應該盡量減少用戶的雙擊操作,而是用單次點擊來代替。

Hold:即長時間的按在某個控件/內容上。例如用戶在玩游戲的時候按住某個按鈕,這表示某種持續性操作;而有時候長時間按住用戶則希望系統能夠給出一個上下文菜單。

Flick:即手指快速的滑動,通常用戶做這個操作的時候是希望窗體上的內容按照滑動的方向進行滾動。同時,手指滑動的速度快慢則體現了用戶希望該內容滑動滾動的速度快慢。

Pan:即手指按在屏幕上然后平移一段距離。通常這種操作的時候,用戶是希望將當前屏幕上的內容按照手指的方向同步平移。這有點像電腦上鼠標的點擊并拖拽的操作。

動畫引擎

對于Tap,Double Tap,Hold和Pan來說,我們看到都比較容易處理。無在乎就是根據用戶的操作來進行提示或者界面繪制或者彈出菜單等等。但是對于Flick來說,要讓窗體滾動起來就相對麻煩一些。

而且,窗體的滾動不能單純的只是一個勻速的移動過程。大家希望能夠看到滾動的內容更加符合現實世界中的一些感官,這也就是物理引擎。例如這個內容的滾動,他應該是從速度慢,然后加速,最后在減速。而最終停止的時候,不應該是直接突然停下來。用戶更加希望他是一個減速過程,同時能夠有阻尼震蕩。慶幸的是,Windwos Mobile 6.5的SDK中,給我們提供了這樣的物理引擎。我們可以很方便的使用它來制作一個窗體滾動的動畫效果。

在這套托管的Gesture API中,提供了一個physicsAnimation對象,他就是我們所利用的物理引擎。要使用這套物理引擎,我們只需要在當前窗體添加這個

physicsAnimation對象,然后設置其ExtentControl和ViewportControl。什么是ExtentControl呢,他就是你想要在窗體上滾動的那塊內容;而ViewportControl,就是用戶當前可以看到的那一部分。如下圖所示:

 

 

我們始終只能看到屏幕中間顯示的地圖的一小塊,但是整個圖片控件其實非常大,已經超出了窗體的范圍。在這里我們需要注意的是,ViewportControl他的實際大小通常比ExtentControl要小,但是它是ExtentControl的父級對象。即 ExtentControl在ViewportControl內部。

當我們需要它進行滾動的時候,我們只需要簡單的設置physicsAnimation對象的運動角度(確切說,是弧度),力度,然后調用其Start方法就可以。而要停止某一個運動,只需要調用其Stop方法,正在滾動的動作就會停止。

  1. private void gestureRecognizer1_Scroll(object sender, GestureScrollEventArgs e) 
  2.  
  3.  
  4. label1.Text = e.Kind.ToString() + ": " + e.State + ", (" + e.X + ", " + e.Y + "), d=" + e.ScrollDirection + "a=" + e.Angle + "v=" + e.Velocity; 
  5.  
  6. this.physicsAnimation1.Stop(); 
  7.  
  8. this.physicsAnimation1.Angle = e.Angle; 
  9.  
  10. this.physicsAnimation1.Velocity = e.Velocity; 
  11.  
  12. this.physicsAnimation1.Start(); 
  13.  

上面這段代碼就演示了physicsAnimation組件的使用方式。這是利用的上一小節中咱們用到的Gesture API來捕獲Flick動作,也就是滾動。

首先我們使用Stop方法停止當前的動畫;然后設置運動的方向的弧度,這里是通過Gesture來判定運動方向;然后是力度,同樣也是從 Gesture中獲得;最后調用Start方法,則指定的ExtentControl就在ViewportControl對象的可視區域內滾動起來。

【編輯推薦】

  1. Windows Mobile 6.5定于10月6日發布
  2. Windows Mobile 6.5 Widgets開發初體驗
  3. Windows Mobile 6.5開發環境搭建以及變化
  4. Windows Mobile 6.5 SDK發布(附下載)

 

責任編輯:佚名 來源: cnmsdn
相關推薦

2009-05-19 10:44:23

微軟Windows mob移動OS

2010-05-23 10:29:29

Widget開發

2009-06-01 08:48:44

微軟Windows Mob移動OS

2009-04-28 09:47:44

WM6.5Windows Mob智能手機

2009-03-12 08:34:54

2010-03-26 09:13:00

Windows Mob系統更新

2010-02-02 17:04:38

Windows MobWindows Mob下載

2009-02-17 10:41:38

Windows Mob操作高清照片

2009-02-17 09:54:34

2009-06-23 10:06:03

2011-09-08 10:04:07

Windows MobWidget

2011-04-25 16:40:21

開發環境搭建Windows Mob

2011-09-08 10:18:09

Windows MobWidgets

2009-02-22 09:04:51

WM 6.5SoftKey改進

2009-05-18 09:06:37

微軟WMWindows Mob

2009-02-09 17:18:46

WindowsMobile 6.5 泄露

2009-09-02 10:16:06

Windows Mob

2009-02-17 09:08:48

Windows MobMy Phone截圖

2009-04-20 08:43:49

Windows Mob微軟移動OS

2013-01-25 14:48:57

Series 40S40
點贊
收藏

51CTO技術棧公眾號

在线观看18视频网站| 蜜桃导航-精品导航| www.成人69.com| 成人午夜av| 国产在线一区二区综合免费视频| 欧美日韩成人高清| 欧美精品一区二区三区久久| 91高清在线| 国产在线一区二区综合免费视频| 亚洲色图狂野欧美| 国产私人影院| 老司机精品视频一区二区三区| 亚洲成人激情在线| 福利在线白白| 日本午夜精品视频在线观看| 欧美成人精品在线视频| 欧美h版电影| 亚洲黄色影院| 欧美一区二区成人6969| 成人午夜两性视频| 毛片在线不卡| 91蝌蚪porny| 成人h视频在线观看| 麻豆视频在线播放| 日本一区影院| 这里只有精品视频在线观看| 在线观看完整版免费| www.99热这里只有精品| 国产精品99久久| 青草热久免费精品视频| 少妇高潮一区二区三区99| 亚洲开心激情网| 国产资源在线观看入口av| 3d动漫精品啪啪一区二区竹菊 | 尤物九九久久国产精品的分类 | 日韩一区二区在线| 4438全国亚洲精品在线观看视频| 欧美福利在线播放| 在线观看欧美www| 电影一区电影二区| 俺去了亚洲欧美日韩| 欧美视频免费看| 欧美xxxx做受欧美| 红杏一区二区三区| 国产99在线|中文| 欧美成人milf| 91手机视频在线观看| 欧美99在线视频观看| 3d精品h动漫啪啪一区二区| 亚洲精品中文字幕乱码| 国产91社区| 日本不卡高清视频| 无码人妻精品一区二区蜜桃百度| 激情另类小说区图片区视频区| 免费在线成人av| 精品一区二区日韩| 777av视频| 亚洲欧洲日韩一区二区三区| av网站免费观看| 日韩欧美在线视频日韩欧美在线视频 | 国内精品视频666| 先锋影音男人资源| 99久久伊人精品| 久热精品在线观看视频| 亚洲黄色免费电影| 噜噜噜噜噜在线视频| 欧美妇女性影城| 在线天堂中文资源最新版| 亚洲一区二区久久| 福利欧美精品在线| 91原创国产| 国产精品456| 国产.com| 日韩写真欧美这视频| 国模私拍国内精品国内av| 秋霞av国产精品一区| 一区在线视频观看| 在线播放豆国产99亚洲| 亚洲国产激情av| 98在线视频| 北条麻妃一区二区三区中文字幕 | 在线视频成人| 日本国产高清不卡| 日本中文字幕一区二区有限公司| 18禁网站免费无遮挡无码中文| 中文字幕日韩av资源站| 久久精品国产亚洲a∨麻豆| 精品乱人伦小说| 999久久精品| 国产美女99p| av在线播放成人| 天堂av中文在线资源库| 亚洲天堂成人在线视频| 日韩精品1区| 欧美一二三不卡| 欧美性生活大片免费观看网址| 综合毛片免费视频| 91麻豆国产精品| 99久久久精品| 91吃瓜网在线观看| 久久91亚洲精品中文字幕| 欧美人与禽猛交乱配视频| 久艹视频在线免费观看| 激情懂色av一区av二区av| 日韩欧美一区二区三区在线观看| 国产精品成熟老女人| 精品一二三四区| 最新天堂资源在线资源| 一本色道久久88精品综合| 中文视频一区| 国产av人人夜夜澡人人爽| 欧美一二三区在线| 国内精品久久久久久99蜜桃| 日本久久高清视频| 在线视频中文字幕一区二区| 91成人入口| 成人性做爰片免费视频| 丁香综合av| 国产资源在线视频| 国产亚洲一级高清| 国产黄色成人av| 亚洲成av在线| 日日噜噜噜噜久久久精品毛片| 日韩国产高清视频在线| 久久超碰97中文字幕| 日韩电影网站| 亚洲啊啊啊啊啊| 日韩有码在线电影| 日韩欧美高清视频| 在线看片一区| 国产 日韩 欧美一区| 日韩欧美亚洲天堂| 日本精品免费一区二区三区| 亚洲精品久久久蜜桃| 伊人狠狠色j香婷婷综合| 亚洲一区av| 真人抽搐一进一出视频| 8x拔播拔播x8国产精品 | 精品综合久久久久久97| 国产福利91精品| jk破处视频在线| 国产精品亚洲人成在99www| 在线观看国产精品91| 午夜电影网一区| 欧美精品一级二级| 色婷婷av一区二区三区久久| 欧美男男gaygay1069| 欧美亚洲丝袜| 欧美日韩一区三区| 91成人观看| 中出在线观看| 国产精品夜间视频香蕉| 最新国产精品久久精品| 一区二区三区视频免费视频观看网站| 国产又粗又大又爽的视频| 精品国产一区二区在线观看| 亚洲黄色免费| 八戒八戒神马在线电影| 久久精品一区二区三区不卡免费视频 | 欧美日韩免费电影| 欧美激情亚洲天堂| 国产小视频国产精品| 国产福利精品导航| 粉嫩一区二区三区| www插插插无码免费视频网站| 亚洲精品日韩丝袜精品| 国产成人av电影在线播放| 亚洲一区二区三区四区| 波多野结衣家庭教师在线| 超碰91人人草人人干| 国产精品福利在线播放| 亚洲宅男一区| 亚洲高清福利| 欧美日韩大片一区二区三区| 精品久久久久久久久久久久久久久久久 | 精品99一区二区三区| 日本在线不卡一区| 中文在线а√天堂| 日本成年人网址| 国产999精品久久久影片官网| 亚洲综合一区二区| 国内精品久久久久久久97牛牛| 欧美18hd| 国产制服91一区二区三区制服| 久久综合久久美利坚合众国| 亚洲人成网站精品片在线观看| 成人3d精品动漫精品一二三| 国产九九在线| 国产成人三级视频| 69精品小视频| 欧美精品日韩一本| 99久久久精品| 国产亚洲视频在线观看| 看高清中日韩色视频| 国产精品久久久对白| 黄色精品一区二区| 成人精品视频99在线观看免费| 欧美亚洲一二三区| 97操碰视频| 欧美色大人视频|