成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

簡介Windows Mobile 6.5 Gesture API

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

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

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

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

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

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

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

用戶按下并保持一定時間,同時手指在一個特定的距離范圍內(nèi),應用程序?qū)盏紾ID_HOLD消息 。在手指抬起或者一個設定的時間間隔之后,將會伴隨一個GID_END消息。

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

應用程序?qū)盏揭粋€或者多個GID_PAN消息,然后是GID_SCROLL消息(手指抬起后),在最后 ,將收到GID_END消息。

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

應用程序?qū)盏揭粋€或者多個GID_PAN消息。 當手指抬起后,將會收到一個GID_END消息。

在Hold之后也可以接著產(chǎn)生Pan的消息。

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

默認支持Gesture的控件

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

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

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

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

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

下面是該工程在Windows Mobile 6.5上運行的狀態(tài):

使用Managed Gesture API

在前面我們提到了微軟針對Windows Mobile的Gesture提供了5種不同的手勢。他們分別是Tap, Double Tap, Hold, Flick, Pan。如果您使用C++來開發(fā)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的用法很簡單,實例化一個他們封裝好的手勢識別器組件,然后給它指定要監(jiān)控的對象。最后,加上針對這5種手勢的事件處理函數(shù)即可。如下代碼所示:

  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用來顯示當前手勢的一些參數(shù)。 運行狀況如下圖所示:

 

 

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

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

使用動畫引擎

手勢的意義

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

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

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

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

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

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

動畫引擎

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

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

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

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

 

 

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

當我們需要它進行滾動的時候,我們只需要簡單的設置physicsAnimation對象的運動角度(確切說,是弧度),力度,然后調(diào)用其Start方法就可以。而要停止某一個運動,只需要調(diào)用其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組件的使用方式。這是利用的上一小節(jié)中咱們用到的Gesture API來捕獲Flick動作,也就是滾動。

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

【編輯推薦】

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

 

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

2009-05-19 10:44:23

微軟Windows mob移動OS

2009-06-01 08:48:44

微軟Windows Mob移動OS

2010-05-23 10:29:29

Widget開發(fā)

2009-04-28 09:47:44

WM6.5Windows Mob智能手機

2009-03-12 08:34:54

2010-03-26 09:13:00

Windows Mob系統(tǒng)更新

2009-02-17 10:41:38

Windows Mob操作高清照片

2010-02-02 17:04:38

Windows MobWindows Mob下載

2009-06-23 10:06:03

2009-02-17 09:54:34

2011-09-08 10:18:09

Windows MobWidgets

2011-04-25 16:40:21

開發(fā)環(huán)境搭建Windows Mob

2011-09-08 10:04:07

Windows MobWidget

2009-02-22 09:04:51

WM 6.5SoftKey改進

2009-02-09 17:18:46

WindowsMobile 6.5 泄露

2009-02-17 09:08:48

Windows MobMy Phone截圖

2009-09-02 10:16:06

Windows Mob

2009-05-18 09:06:37

微軟WMWindows Mob

2009-04-20 08:43:49

Windows Mob微軟移動OS

2013-01-25 14:48:57

Series 40S40
點贊
收藏

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

主站蜘蛛池模板: 国产精品夜间视频香蕉 | 最新国产精品精品视频 | 伊人精品视频 | 国产精品99久久久久久www | 日韩一区二区在线视频 | 黑人精品 | 免费在线观看毛片 | av中文字幕在线 | 免费在线观看成年人视频 | 久久福利电影 | 欧美亚洲视频 | 日韩欧美一级 | 日本不卡一区二区三区在线观看 | 99久久精品免费看国产四区 | 99精品视频免费观看 | 国产精品久久久久免费 | 亚洲成人精品 | 久久成人免费 | 99在线资源| 日韩精品一区二区三区 | 91麻豆精品一区二区三区 | 中文天堂在线观看 | 国产精品一区二区不卡 | 亚洲一区二区av | 看羞羞视频免费 | 日本久久精品视频 | 欧美日韩国产一区二区三区 | 亚州激情| 久久国产精品一区二区三区 | 欧美性受xxxx| 亚洲一区免费视频 | 久久国产日韩欧美 | 国产精品视频不卡 | 久久精品国产免费高清 | 亚洲第一在线 | 国产日韩欧美中文 | 欧美自拍日韩 | 性福视频在线观看 | aa级毛片毛片免费观看久 | 96av麻豆蜜桃一区二区 | 波多野结衣中文字幕一区二区三区 |