2015-01-17 5 views
0

스 와이프 때마다 일부 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

:

코드는 다음과 같아야합니다 (단 수직 슬쩍 확인)? – saadtaame

+0

@saadtaame은 제스처입니다. 화면에서 손가락을 아주 빨리 움직이면 Google처럼됩니다. :) –

답변

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