代码之家  ›  专栏  ›  技术社区  ›  anon

如何检查屏幕上是否有3个手指

  •  5
  • anon  · 技术社区  · 14 年前

    对于我的应用程序,我想使用所有内置的操作可能性,例如缩放。但是如果用户在屏幕上按3个手指,我想显示一个特定的UI元素。那么,检查用户是否同时按下屏幕上的3个手指,并且彼此相邻,最好的方法是什么?(不禁用内置操作可能性)。

    我的第一个方法是在布局的顶部网格元素上注册触地事件。在事件处理程序中,我得到了联系人。但是在那里怎么办?

    只需检查联系人是否是指纹,将其存储在列表中,然后检查列表是否已经包含两个类似的图标?

    还是有更性感的解决方案?

    谢谢!

    编辑:

    根据答案,我写了两个方法:

    private void OnContactDown(object sender, ContactEventArgs e)
            {
                if (this.ContactsOver.Count == 3)
                {
                    Console.WriteLine("3 contacts down. Check proximity");
    
                    if (areNear(this.ContactsOver))
                    {
                        Console.WriteLine("3 fingers down!");
                    }
                }
            }
    
            private Boolean areNear(ReadOnlyContactCollection contacts)
            {
                if ( Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).X - contacts.ElementAt(1).GetCenterPosition(this).X) < 100 &&
                     Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).Y - contacts.ElementAt(1).GetCenterPosition(this).Y) < 100 &&
                     Math.Abs(contacts.ElementAt(1).GetCenterPosition(this).X - contacts.ElementAt(2).GetCenterPosition(this).X) < 100 &&
                     Math.Abs(contacts.ElementAt(1).GetCenterPosition(this).Y - contacts.ElementAt(2).GetCenterPosition(this).Y) < 100 &&
                     Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).X - contacts.ElementAt(2).GetCenterPosition(this).X) < 100 &&
                     Math.Abs(contacts.ElementAt(0).GetCenterPosition(this).Y - contacts.ElementAt(2).GetCenterPosition(this).Y) < 100)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
    

    他们必须重写,但它是有效的。并且必须调整阈值(atm 100)。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Isak Savo    14 年前

    所有曲面控件上都有一个属性,该属性包含其上的联系人数。属性是ContactsOver或它的任何变体,这取决于您的需要,请参见 http://msdn.microsoft.com/en-us/library/microsoft.surface.presentation.controls.surfacecontrol_properties(v=Surface.10).aspx

    例如,您可以在ContactDown事件处理程序中检查属性的计数值。要检查它们的距离,只需对它们做一个GetPosition,并对这些点使用基本的矢量数学。