首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GestureRecognizer中的触点数量

GestureRecognizer中的触点数量
EN

Stack Overflow用户
提问于 2012-09-29 02:35:51
回答 2查看 758关注 0票数 2

我正在使用GestureRecognizer来检测拖拽和挤压手势。

ManipulationStartedManipulationUpdatedManipulationCompleted事件提供了收缩和拖动所需的平移值和缩放值。

GestureRecognizer中没有关于接触点数量的信息。

如何在GestureRecognizer中区分拖拽和挤压

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-22 23:41:43

好吧,我觉得它很老套(因为大多数解决方案似乎都是为了一个可用的WinRT应用程序),但你可以创建一个List<uint>来跟踪当前屏幕上指针的数量。您必须在与之交互的任何控件上处理PointerPressed事件(假设您使用的是Canvas),以便在指针被按下时“捕获”它们。这就是您要填充List<uint>的地方。不要忘记在ManipulationCompleted事件结束时清除列表,以及在任何手势结束时触发的任何事件(如PointerReleasedPointerCanceledPointerCaptureLost)。也许确保在ManipulationStarted事件中清除该列表将是一个好主意。也许你可以试一试,看看它对你有什么效果。

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

下面是它可能的样子:

代码语言:javascript
复制
private void Canvas_PointerPressed(object sender, PointerRoutedEventArgs e)
{
    var ps = e.GetIntermediatePoints(null);
    if (ps != null && ps.Count > 0)
    {
        this.gestureRecognizer.ProcessDownEvent(ps[0]);
        this.pointerList.Add(e.Pointer.PointerId);
        e.Handled = true;
    }
}

private void gestureRecognizer_ManipulationCompleted(GestureRecognizer sender, ManipulationCompletedEventArgs args)
{         
    if (this.pointerList.Count == 2)
    {
       // This could be your pinch or zoom.
    }
    else
    {
       // This could be your drag.
    }

    // Don't forget to clear the list.
    this.pointerList.Clear();
}

// Make sure you clear your list in whatever events make sense.
private void Canvas_PointerReleased(object sender, PointerRoutedEventArgs e)
{
    this.pointerList.Clear();
}

private void Canvas_PointerCanceled(object sender, PointerRoutedEventArgs e)
{
    this.pointerList.Clear();
}
票数 2
EN

Stack Overflow用户

发布于 2012-11-20 22:30:22

这个问题我已经纠结了好几个小时了,看起来WinRT平台并没有提供这个功能。相反,它提供的是Delta.Rotation和Delta.Scale值,以及带有ManipulationUpdated回调参数的Delta.Translation。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12645524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档