ManipulationDelta事件仅​​在传递阈值后触发

时间:2012-04-27 08:10:57

标签: windows-phone-7

我正在尝试编写一些允许用户在触摸屏上绘图的代码。

当使用GestureService或ManipulationStarted / Delta时,当用户开始移动他们的手指时会发生“暂停” - 只有当手指离开它的位置足够远时才会开始获取ManipulationDelta事件(就像我说的,GestureService也是如此)。

我可以做些什么来避免这个门槛?它在绘制代码时效果不佳。

1 个答案:

答案 0 :(得分:4)

刚刚发表了关于它的博客,因为我在AppHub论坛上遇到过类似的问题。 https://invokeit.wordpress.com/2012/04/27/high-performance-touch-interface-wpdev-wp7dev/

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

您要插入触摸触摸的事件是

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.");
    }
}

这比高级接口更好用。