我想在每次滑动时从某些2D点进行检测。 这些要点不断传来,它们来自传感器。并且在2D空间中,x和y。
这有什么算法吗?
我尝试过这样的事情
float totalDistance = 0f;
float totalTime = 0f;
for (int i = points.size - 1; i > 0; i--) {
SwipePoint point1 = points.get(i); // last point added
SwipePoint point2 = points.get(i - 1); // second last point
totalDistance += point1.distance(point2);
if (totalDistance > MIN_SWIPE_DISTANCE
&& totalTime > MIN_SWIPE_TIME) {
// we have a swipe
listener.onSwipe(SwipeType.DOWM, 1f);
points.clear();
return;
}
}
在这里,我检查线条的长度是否大于常数,并且时间相同,但没有显示任何内容。
这有什么算法吗?
感谢。
答案 0 :(得分:1)
您的算法似乎无法识别滑动,其中一个问题就在于此行:
totalDistance += point1.distance(point2);
它做什么计算手指行走的总长度并触发"轻扫"即使手指以任何轨迹行进足够长的时间。
你应该做的是记录第一个点的x和y坐标,当你遇到一个距离开始足够远的点时,你可以触发一次滑动。
算法中的第二个问题是,您应该检查滑动时间 是否大于最大滑动时间。此外,您似乎无法在代码中的任何位置更新totalTime。
代码应如下所示(仅检查垂直滑动):
SwipePoint startPoint = points.get(points.size - 1);
for (int i = points.size - 2; i > 0; i--) {
SwipePoint point = points.get(i); // last point added
int yDiff = Math.abs(startPoint.getY() - point.getY());
long totalTime = startPoint.getTime() - point.getTime();
if yDiff > MIN_SWIPE_DISTANCE
&& totalTime < MIN_SWIPE_TIME) {
// we have a swipe
listener.onSwipe(SwipeType.DOWM, 1f);
points.clear();
return;
}
}