Windows Mobile 6.5 Gesture API 介绍 --- (4) 使用动画引擎

原文首发MobileSide.cnhttp://mobileside.cn/post/2010/02/09/GestureAPI4.aspx

 


 

手势的意义

在上一小节《Windows Mobile 6.5 Gesture API 介绍 --- (3) 使用Managed Gesture API 》 中,我们学会了如何使用托管的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,就是用户当前可以看到的那一部分。如下图所示:

image

我们始终只能看到屏幕中间显示的地图的一小块,但是整个图片控件其实非常大,已经超出了窗体的范围。在这里我们需要注意的 是,ViewportControl他的实际大小通常比ExtentControl要小,但是它是ExtentControl的父级对象。即 ExtentControl在ViewportControl内部。

当我们需要它进行滚动的时候,我们只需要简单的设置physicsAnimation对象的运动角度(确切说,是弧度),力度,然后调用其Start方法就可以。而要停止某一个运动,只需要调用其Stop方法,正在滚动的动作就会停止。

private void gestureRecognizer1_Scroll( object sender, GestureScrollEventArgs e)
{
    label1.Text = e.Kind.ToString() + ": " + e.State + ", (" + e.X + ", " + e.Y + "), d=" + e.ScrollDirection + ", a=" + e.Angle + ", v=" + e.Velocity;
     this .physicsAnimation1.Stop();            
     this .physicsAnimation1.Angle = e.Angle;
     this .physicsAnimation1.Velocity = e.Velocity;
     this .physicsAnimation1.Start();
}

上面这段代码就演示了physicsAnimation组件的使用方式。这是利用的上一小节 中咱们用到的Gesture API来捕获Flick动作,也就是滚动。

首先我们使用Stop方法停止当前的动画;然后设置运动的弧度,这里是通过Gesture来判定运动方向;然后是力度,同样也是从Gesture中 获得;最后调用Start方法,则指定的ExtentControl就在ViewportControl对象的可视区域内滚动起来。具体参见http://code.msdn.microsoft.com/gestureswm 中所提供的GestureHarness工程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值