我正在尝试编写一些允许用户在触摸屏上绘图的代码。
当使用 GestureService 或 ManipulationStarted/Delta 时,当用户开始移动手指时会出现“暂停” - 只有当手指距离开始点足够远时,您才会开始获取 ManipulationDelta 事件(例如我说过,GestureService 也是如此)。
我能做些什么来避免这个门槛?它确实不适用于绘图代码。
我正在尝试编写一些允许用户在触摸屏上绘图的代码。
当使用 GestureService 或 ManipulationStarted/Delta 时,当用户开始移动手指时会出现“暂停” - 只有当手指距离开始点足够远时,您才会开始获取 ManipulationDelta 事件(例如我说过,GestureService 也是如此)。
我能做些什么来避免这个门槛?它确实不适用于绘图代码。
刚刚写了博客,因为我在 AppHub 论坛上遇到了类似的问题。 https://invokeit.wordpress.com/2012/04/27/high-performance-touch-interface-wpdev-wp7dev/
Manipulation Delta 和 Gesture 服务是高级触摸界面。如果您想要性能,请考虑使用低级接口:Touch 和一个名为 TouchReported 的事件。我倾向于在我的许多项目中主要使用它们(用于绘图/位置检测)
您要插入到 detech touch 的事件是
Touch.FrameReported += Touch_FrameReported;
您可以在 Loaded 事件中执行此操作。这是 Touch_FrameReported 处理程序的实现。WorkArea 在这方面是 Canvas。我也将它与 WritableBitmap 结合使用
private void Touch_FrameReported(object sender, TouchFrameEventArgs e)
{
try
{
// Determine if finger / mouse is down
point = e.GetPrimaryTouchPoint(this.workArea);
if (point.Position.X < 0 || point.Position.Y < 0)
return;
if (point.Position.X > this.workArea.Width || point.Position.Y > this.workArea.Height)
return;
if (this.lbLetter.SelectedIndex == -1)
return;
switch (point.Action)
{
case TouchAction.Down:
draw = true;
old_point = point;
goto default;
case TouchAction.Up:
draw = false;
break;
default:
Draw();
break;
}
}
catch
{
MessageBox.Show("Application encountered error processing last request.");
}
}
这比高级接口好得多。