2012-04-27 57 views
1

我正在尝试编写一些代码,以允许用户在触摸屏上绘图。ManipulationDelta事件仅​​在通过阈值后触发

当使用GestureService或ManipulationStarted/Delta时,当用户开始移动手指时会出现“暂停” - 只有当手指离开始点足够远时,才会开始获取ManipulationDelta事件(就像我说的,对于GestureService也是如此)。

我能做些什么来避免这个阈值?它实际上不适合绘制代码。

+0

您是否试过这里的示例:http://www.windowsphonegeek.com/tips/WP7-DrawingBoard-sample-Drawing--Ink--made-easy – 2012-04-27 08:35:39

回答

4

刚才在AppHub论坛上发现了类似的问题,只是发表了博客。 https://invokeit.wordpress.com/2012/04/27/high-performance-touch-interface-wpdev-wp7dev/

操纵Delta和手势服务是高级别的触摸界面。如果您需要性能,请考虑使用低级别界面:Touch和一个名为TouchReported的事件。我倾向于在许多主要使用它们(绘图/位置检测)我的项目

要插上detech触摸事件的是

Touch.FrameReported += Touch_FrameReported; 

你可以在Loaded事件做到这一点。以下是Touch_FrameReported处理程序的实现。 WorkArea是在这个画布。我也用它与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."); 
    } 
} 

这个工作比高级接口好得多。