鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > .net技术 > WinRT/Metro > >

输入: 边缘手势, 手势操作, 手势识别

来源:互联网 作者:佚名 时间:2013-10-22 10:33
重新想象 Windows 8 Store Apps (50) - 输入: 边缘手势, 手势操作, 手势识别Posted on [源码下载] 重新想象 Windows 8 Store Apps (50) - 输入: 边缘手势, 手势操作, 手势识别 作者:webabcd 介绍 重新想象 Windows 8 Store Apps 之 手势 示例 1、演示如何监

重新想象 Windows 8 Store Apps (50) - 输入: 边缘手势, 手势操作, 手势识别 Posted on

[源码下载]


重新想象 Windows 8 Store Apps (50) - 输入: 边缘手势, 手势操作, 手势识别



作者:webabcd


介绍
重新想象 Windows 8 Store Apps 之 手势



示例
1、演示如何监测边缘手势
Input/Touch/EdgeGestureDemo.xaml

<Page x:Class="XamlDemo.Input.Touch.EdgeGestureDemo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:XamlDemo.Input.Touch" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable

Input/Touch/EdgeGestureDemo.xaml.cs

/* * 演示如何监测边缘手势 * * EdgeGesture - 边缘手势的帮助类 * GetForCurrentView() - 获取当前的 EdgeGesture 对象 * Starting - 边缘手势开始时触发的事件 * Completed - 边缘手势完成后触发的事件 * Canceled - 边缘手势取消后触发的事件 * * EdgeGestureEventArgs - 触发边缘手势事件后的事件参数 * EdgeGestureKind - 边缘手势的输入类型(Touch, Keyboard, Mouse) */ using System; using Windows.UI.Input; using Windows.UI.Xaml.Controls; namespace XamlDemo.Input.Touch { EdgeGestureDemo : Page { public EdgeGestureDemo() { this.InitializeComponent(); EdgeGesture edgeGesture = EdgeGesture.GetForCurrentView(); edgeGesture.Canceled += edgeGesture_Canceled; edgeGesture.Completed += edgeGesture_Completed; edgeGesture.Starting += edgeGesture_Starting; } void edgeGesture_Starting(EdgeGesture sender, EdgeGestureEventArgs args) { lblMsg.Text += ; lblMsg.Text += Environment.NewLine; } void edgeGesture_Completed(EdgeGesture sender, EdgeGestureEventArgs args) { lblMsg.Text += ; lblMsg.Text += Environment.NewLine; } void edgeGesture_Canceled(EdgeGesture sender, EdgeGestureEventArgs args) { lblMsg.Text += ; lblMsg.Text += Environment.NewLine; } } }


2、演示 Manipulate 的应用(位移手势,缩放手势,旋转手势)
Input/Touch/Manipulate.xaml

<Page x:Class="XamlDemo.Input.Touch.Manipulate" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:XamlDemo.Input.Touch" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable

Input/Touch/Manipulate.xaml.cs

/* * 演示 Manipulate 的应用(位移手势,缩放手势,旋转手势) * * * 注:Manipulate 一般用于手势操作,GestureRecognizer 一般用于手势识别 * * * UIElement - UI 元素 * ManipulationModes - 需要监测的手势(Windows.UI.Xaml.Input.ManipulationModes 枚举) * 包括:位移手势以及是否带有位移惯性以及是否带有位移轨道,缩放手势以及是否带有缩放惯性,旋转手势以及是否带有旋转惯性 * ManipulationStarting - 触控操作开始时触发的事件 * ManipulationStarted - 触控操作开始后触发的事件 * ManipulationInertiaStarting - 触控操作的惯性开始时触发的事件 * ManipulationCompleted - 触控操作结束后触发的事件 * ManipulationDelta - 触控值发生变化时触发的事件 * * * ManipulationStartingRoutedEventArgs * Container - 此 Manipulation 的容器 * Mode - 获取或设置 ManipulationModes * Pivot - 获取或设置轴对象,ManipulationPivot 类型的数据 * Center - 旋转中心点 * Radius - 有效的旋转半径 * * ManipulationStartedRoutedEventArgs * Container - 此 Manipulation 的容器 * Cumulative - 自操作开始后的累计变化量,返回 ManipulationDelta 类型的对象 * Position - 触摸点相对于 UIElement 的位置 * Complete() - 马上完成 Manipulation 而不发生惯性 * * ManipulationDeltaRoutedEventArgs * Container - 此 Manipulation 的容器 * Cumulative - 自操作开始后的累计变化量,返回 ManipulationDelta 类型的对象 * Delta - 当前变化量,返回 ManipulationDelta 类型的对象 * Velocities - 当前变化的速率,返回 ManipulationVelocities 类型的对象 * IsInertial - 是否在惯性运动之中 * Position - 触摸点相对于 UIElement 的位置 * Complete() - 马上完成 Manipulation 而不发生惯性 * * ManipulationInertiaStartingRoutedEventArgs * Container - 此 Manipulation 的容器 * Cumulative - 自操作开始后的累计变化量,返回 ManipulationDelta 类型的对象 * Delta - 当前变化量,返回 ManipulationDelta 类型的对象 * Velocities - 当前变化的速率,返回 ManipulationVelocities 类型的对象 * ExpansionBehavior - 惯性的缩放行为,获取或设置 InertiaExpansionBehavior 类型的对象 * DesiredDeceleration - 惯性运动时,缩放的减慢速率 * DesiredExpansion - 惯性结束后,缩放的值 * RotationBehavior - 惯性的旋转行为,,获取或设置 InertiaRotationBehavior 类型的对象 * DesiredDeceleration - 惯性运动时,旋转的减慢速率 * DesiredRotation - 惯性结束后,旋转的度数 * TranslationBehavior - 惯性的位移行为,获取或设置 InertiaTranslationBehavior 类型的对象 * DesiredDeceleration - 惯性运动时,直线位移的减慢速率 * DesiredDisplacement - 惯性结束后,直线位移的的值 * * ManipulationCompletedRoutedEventArgs * Container - 此 Manipulation 的容器 * Cumulative - 自操作开始后的累计变化量,返回 ManipulationDelta 类型的对象 * Velocities - 当前变化的速率,返回 ManipulationVelocities 类型的对象 * IsInertial - 结束前是否发生了惯性运动 * Position - 触摸点相对于 UIElement 的位置 * * * ManipulationDelta - 变化量 * Expansion - 触摸点间距离的变化,单位 dip * Scale - 触摸点间距离的变化,以一个百分比表示 * Rotation - 旋转角度的变化,以角度为单位 * Translation - 位移的变化,Point 类型的对象 * * ManipulationVelocities - 变化速率 * Angular - 旋转速度,单位:度/毫秒 * Expansion - 缩放速度,单位:dip/毫秒 * Linear - 直线位移速度,单位:Point/毫秒 * * * 什么是 dip: device independent pixels(设备独立像素),不管屏大小和分辨率,把屏幕分成 480 * 320 个点,其中每一点代表 1 dip */ using System; using Windows.Foundation; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; namespace XamlDemo.Input.Touch { Manipulate : Page { private TransformGroup _transformGroup; private CompositeTransform _compositeTransform; private MatrixTransform _previousTransform; public Manipulate() { this.InitializeComponent(); // 监测全部手势 rectangle.ManipulationMode = ManipulationModes.All; _transformGroup = new TransformGroup(); _compositeTransform = new CompositeTransform(); _previousTransform = new MatrixTransform() { Matrix = Matrix.Identity }; _transformGroup.Children.Add(_previousTransform); _transformGroup.Children.Add(_compositeTransform); rectangle.RenderTransform = _transformGroup; rectangle.ManipulationStarting += rectangle_ManipulationStarting; rectangle.ManipulationStarted += rectangle_ManipulationStarted; rectangle.ManipulationInertiaStarting += rectangle_ManipulationInertiaStarting; rectangle.ManipulationCompleted += rectangle_ManipulationCompleted; rectangle.ManipulationDelta += rectangle_ManipulationDelta; } rectangle_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) { _previousTransform.Matrix = _transformGroup.Value; // 获取操作点相对于此 GeneralTransform 的位置 Point center = _previousTransform.TransformPoint(new Point(e.Position.X, e.Position.Y)); _compositeTransform.CenterX = center.X; _compositeTransform.CenterY = center.Y; _compositeTransform.Rotation = e.Delta.Rotation; _compositeTransform.ScaleX = e.Delta.Scale; _compositeTransform.ScaleY = e.Delta.Scale; _compositeTransform.TranslateX = e.Delta.Translation.X; _compositeTransform.TranslateY = e.Delta.Translation.Y; } void rectangle_ManipulationStarting(object sender, ManipulationStartingRoutedEventArgs e) { lblMsg.Text += ; lblMsg.Text += Environment.NewLine; } void rectangle_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e) { lblMsg.Text += ; lblMsg.Text += Environment.NewLine; } void rectangle_ManipulationInertiaStarting(object sender, ManipulationInertiaStartingRoutedEventArgs e) { lblMsg.Text += ; lblMsg.Text += Environment.NewLine; } void rectangle_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) { lblMsg.Text += ; lblMsg.Text += Environment.NewLine; } } }


3、演示 GestureRecognizer 的应用
Input/Touch/GestureRecognizerDemo.xaml

网友评论
<