检测滑动算法?

时间:2015-01-17 18:24:41

标签: java algorithm swipe detect

我想在每次滑动时从某些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;
        }
    }

在这里,我检查线条的长度是否大于常数,并且时间相同,但没有显示任何内容。

这有什么算法吗?

感谢。

1 个答案:

答案 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;
    }
}