windows phone 之笔势

时间:2023-03-09 06:26:55
windows phone 之笔势

笔势:

Windows Phone 用户可以使用触控笔势与他们的手机进行交互。触控笔势被定义为用户在触摸屏上使用单个或多个手指发起的运动。Windows Phone 上支持的控件都可以识别笔势。这些控件支持诸如点击平移轻拂等笔势。您可以通过使用在几乎所有可视元素上都存在的 UIElement 事件处理简单的笔势,如点击双击长按。有关笔势支持的更多信息,请参见 Windows Phone 手势支持

Windows Phone 7的 Silverlight 应用程序:

获取低级触控输入

通过静态 Touch.FrameReported 事件

获取高级输入

通过各种 Manipulation 路由事件

Windows Phone 7 的 XNA 应用程序:

静态的 TouchPanel 类(整合了两个触控界面)

GetState 方法获取低级手指活动

ReadGesture 方法获取高级手势。

为了与 XNA 体系结构保持一致,触控输入由应用程序轮询,而不是通过事件传送。

Silverlight中:

在工具包中新增此 Silverlight 手势支持旨在提供与 XNA TouchPanel.ReadGesture 方法相似的功能,但它是通过路由事件而不是轮询实现的。

看一下源代码,我非常吃惊地发现这些新的 Silverlight 手势事件完全是由对 XNA TouchPanel.ReadGesture 方法的调用派生而来的。 我也不会想到 Windows Phone 上的 Silverlight 应用程序会被允许调用此 XNA 方法,但事实就是这样。

尽管 Silverlight 和 XNA 手势非常相似,但是与手势相关的属性却不相似。 例如,XNA 属性使用的是矢量,而 Silverlight 不包含 Vector 结构(我觉得这是一个荒谬的遗漏),所以必须按照某些简单的方式为 Silverlight 重新定义属性。

以下是 12 个可用的手势事件,我将按大致顺序对其进行讨论(我将其分组到同一行的事件是相关的,而且发生顺序相同):

(1)GestureBegin, GestureCompleted(Gesture手势)

(2)Tap(中文意思:轻敲;轻打;轻拍;轻击)

(3)DoubleTap
(4)Hold
(5)DragStarted, DragDelta, DragCompleted(Drag拖)
(6)Flick(中文意思:轻弹;忽然摇动;轻轻拂去)
(7)PinchStarted, PinchDelta, PinchCompleted(中文意思:捏)

 

假设您要处理发生在 Grid 或任何子 Grid 的 Tap 和 Hold 事件。 您可以在 XAML 文件中进行指定,指定方法如下所示:

windows phone 之笔势

另外一种方法:

windows phone 之笔势

注意:不管是哪种情况,如果要在面板上设置此手势侦听器,请确保至少将 Background 属性设为 Transparent!事件将通过一个默认背景为空的面板来实现。

Tap 和 Hold

所有手势事件都附带类型为 GestureEventArgs 或从 GestureEventArgs 派生的类型的事件参数。

OriginalSource 属性指示碰到屏幕的第一根手指触摸到的最顶层的元素;GetPosition 方法提供这根手指相对于任何元素的当前坐标。

可对手势事件进行路由,这意味着它们可以在可视树中传递,并且可以针对安装了GestureListener 的任何元素进行处理。

与往常一样,事件处理程序可以将 GestureEventArgs 的 Handled 属性设置为 true,以防止事件在可视树中进一步传递。但是,这只能影响使用这些手势事件的其他元素。将 Handled 设置为 true 并不能防止可视树中较高级别的元素通过其他界面获取触控输入。

GestureBegin 事件指示有手指触摸了以前手指未触摸到的屏幕;当所有手指都离开屏幕后,GestureCompleted 会发出信号。这些事件可以为初始化或清理提供便利,但是您通常会更关注在这两个事件之间发生的手势事件。

我不会在较简单的手势上花费太多的时间。

(1)当有手指触摸屏幕,然后在大约 1.1 秒内抬起,并且手指从原始位置并未移动很远时,会发生 Tap。

(2)如果相继两次点击的时间间隔太短,那么第二次点击会被当作 DoubleTap 接收。

(3)当有手指在屏幕上按下并在大致相同的位置停留大约 1.1 秒时会发生 Hold。Hold 事件在这个时间结束时生成,不需要等到手指离开屏幕。

Drag 和 Flick

当有手指触摸屏幕、在屏幕上移动或离开屏幕时会发生 Drag 序列(包含一个 DragStarted 事件、零个或更多 DragDelta 事件以及一个 DragCompleted 事件)