Windows 8 手势识别器中的接触点数

Windows 8 手势识别器中的接触点数,windows-8,touch,windows-runtime,windows-phone,Windows 8,Touch,Windows Runtime,Windows Phone,我正在使用手势识别器来检测拖拉和挤压手势 操纵开始、操纵更新和操纵完成事件提供了收缩和拖动所需的平移和缩放值 然而,我不知道如何区分拖动(1个触点)和挤压(2个触点)手势。手势识别器中没有关于接触点数量的信息 如何使用手势识别器区分拖拽和挤压?我已经为同一个问题苦苦挣扎了几个小时,看起来WinRT平台没有提供这一点。它提供的是Delta.Rotation和Delta.Scale值,以及带有操纵更新回调参数的Delta.Translation 如果Delta.Rotation为0(或非常接近于零,

我正在使用
手势识别器
来检测拖拉和挤压手势

操纵开始
操纵更新
操纵完成
事件提供了收缩和拖动所需的平移和缩放值

然而,我不知道如何区分拖动(1个触点)和挤压(2个触点)手势。
手势识别器中没有关于接触点数量的信息


如何使用
手势识别器区分拖拽和挤压?

我已经为同一个问题苦苦挣扎了几个小时,看起来WinRT平台没有提供这一点。它提供的是Delta.Rotation和Delta.Scale值,以及带有操纵更新回调参数的Delta.Translation


如果Delta.Rotation为0(或非常接近于零,因为它是一个浮点值),Delta.Scale为1(或非常接近于1),则可以得出结论,收缩操作不是这种情况,正在执行拖动操作,否则它是收缩操作。这不是你能得到的最好的,但它看起来是目前唯一的可用性。

我已经为同一个问题挣扎了几个小时,而WinRT平台似乎没有提供这一点。它提供的是Delta.Rotation和Delta.Scale值,以及带有操纵更新回调参数的Delta.Translation


如果Delta.Rotation为0(或非常接近于零,因为它是一个浮点值),Delta.Scale为1(或非常接近于1),则可以得出结论,收缩操作不是这种情况,正在执行拖动操作,否则它是收缩操作。这不是你能得到的最好的解决方案,但它看起来是目前唯一可用的解决方案。

好吧,我觉得它非常粗糙(因为大多数解决方案似乎适用于可用的WinRT应用程序),但你可以创建一个
列表来跟踪屏幕上当前显示的指针数量。您必须在与之交互的任何控件上处理
PointerPressed
事件(假设您使用的是
Canvas
)以“捕获”按下的指针。这就是您将填充
列表的地方。不要忘记在
操作完成
事件结束时清除列表,以及在任何手势结束时触发的任何事件(如
指针删除
指针取消
,以及
指针捕获丢失
)。也许最好确保在
manufactionstarted
事件中清除列表。也许你可以试试,看看这对你有什么好处

operationcompleted
事件中,您可以检查列表是否正好包含2个元素(pointerid)。如果是这样,那么您就知道这是一个收缩/缩放

下面是它可能的样子:

private void Canvas\u PointerPressed(对象发送方,PointerRoutedEventArgs e)
{
var ps=e.GetIntermediatePoints(空);
如果(ps!=null&&ps.Count>0)
{
这个.gestureRecognitor.ProcessDownEvent(ps[0]);
this.pointerList.Add(e.Pointer.PointerId);
e、 已处理=正确;
}
}
私有无效GestureRecognitor_操作已完成(GestureRecognitor发件人,操作已完成事件args args)
{         
if(this.pointerList.Count==2)
{
//这可能是你的收缩或缩放。
}
其他的
{
//这可能是你的拖累。
}
//别忘了清理清单。
this.pointerList.Clear();
}
//确保你在任何有意义的事件中都清除了你的清单。
私有void Canvas_PointerReleased(对象发送方,PointerRoutedEventArgs e)
{
this.pointerList.Clear();
}
私有void Canvas_PointerCanceled(对象发送方,PointerRoutedEventArgs e)
{
this.pointerList.Clear();
}

好吧,我觉得这是一个非常粗糙的问题(因为大多数解决方案似乎都是针对可用的WinRT应用程序的),但是你可以创建一个
列表来跟踪屏幕上当前显示的指针数量。您必须在与之交互的任何控件上处理
PointerPressed
事件(假设您使用的是
Canvas
)以“捕获”按下的指针。这就是您将填充
列表的地方。不要忘记在
操作完成
事件结束时清除列表,以及在任何手势结束时触发的任何事件(如
指针删除
指针取消
,以及
指针捕获丢失
)。也许最好确保在
manufactionstarted
事件中清除列表。也许你可以试试,看看这对你有什么好处

operationcompleted
事件中,您可以检查列表是否正好包含2个元素(pointerid)。如果是这样,那么您就知道这是一个收缩/缩放

下面是它可能的样子:

private void Canvas\u PointerPressed(对象发送方,PointerRoutedEventArgs e)
{
var ps=e.GetIntermediatePoints(空);
如果(ps!=null&&ps.Count>0)
{
这个.gestureRecognitor.ProcessDownEvent(ps[0]);
this.pointerList.Add(e.Pointer.PointerId);
e、 已处理=正确;
}
}
私有无效GestureRecognitor_操作已完成(GestureRecognitor发件人,操作已完成事件args args)
{         
if(this.pointerList.Count==2)
{
//这可能是你的收缩或缩放。
}
其他的
{
//这可能是你的拖累。
}
//别忘了清理清单。
this.pointerList.Clear();
}
//确保你在任何有意义的事件中都清除了你的清单。
私有void Canvas_PointerReleased(对象发送方,PointerRoutedEventArgs e)
{
this.pointerList.Clear();
}
私有void Canvas_PointerCanceled(对象发送方,PointerRoutedEventArgs e)
{
this.pointerList.Clear();
}
希望您能做到以下几点