我试图让你进入图片,我正试图在WPF4 VS2010中实现一个手势,就像你移动你的手指直到它穿过你已经用相同手指传过的TouchPoint,所以我的想法是制作一个列表并检查每个新TouchPoint是否存在,如果是,那么你已经完成了你的手势,如果没有,那么将TouchPoint添加到集合中以与下面的TouchPoints进行比较。由于某种原因,这不能很好地工作,所以我转向另一种方法,用Touch替换TouchPoints X,Y为TouchPoint并将它们转换为字符串并尝试对它们使用Contains方法,使用TouchMove和TouchUp事件我的代码如下: / p>
private void g1_TouchMove(object sender, TouchEventArgs e)
{
if(touchX.Contains(""+e.GetTouchPoint(g1).Position.X) && touchY.Contains(""+e.GetTouchPoint(g1).Position.Y))
{
// Clearing the lists , changing the canvas background color to know that the gesture is done
touchX.Clear();
touchY.Clear();
g1.Background = Brushes.AliceBlue;
}
else
{
//adding new X, Y values to their respective lists
touchX.Add(""+e.GetTouchPoint(g1).Position.X);
touchY.Add( ""+e.GetTouchPoint(g1).Position.Y);
}
}
private void g1_TouchUp(object sender, TouchEventArgs e)
{
//clearing the lists after the touch is up (finger removed)
touchX.Clear();
touchY.Clear();
//getting the canvas it's original background color
g1.Background = Brushes.Orange;
}
因此,在测试它时它不起作用,即使我直接移动触摸它也会改变背景。任何想法?
提前致谢
答案 0 :(得分:1)
首先,请回到使用数字。将数字放入字符串以供以后比较在如此多的级别上是错误的: - )
我的猜测是你的问题是一个分辨率问题 - 几乎不可能与之前的完全相同的地点,因为有一个批次屏幕上的像素。基本上,一个像素关闭将使您的算法无用。您应该将触摸区域映射到几个较大的簇中,然后检查触摸是否已经在此群集中(与完全相同的像素相反)。
一种简单的方法是对您收到的坐标进行整数除法。
在下面的示例中,我将像素坐标系划分为3 x 3像素的簇,但如果对你有意义,你可以选择更大的像素坐标系。这一切都取决于触摸区域的分辨率有多大。
这在实践中意味着这个3乘3区域内的任何像素都被视为相等。因此,(1,1)
上的匹配与(2,3)
上的上次匹配相匹配,依此类推。
// Divide into 3x3 pixel clusters
var currentCluster = new Point((int)touchPos.X / 3, (int)touchPos.Y / 3)
// previousClusters is a List<Point>() which is cleared on TouchUp
foreach (var cluster in previousClusters)
{
if (cluster == currentCluster)
{
// We've been here before, do your magic here!
g1.Background = Brushes.AliceBlue;
// Return here, since we don't want to add the point again
return;
}
}
previousClusters.Add(currentCluster);