2014-10-08 2 views
0

Создал класс, который реализует GestureDetector.OnGestureListener. Тем не менее, я не знаю, как эти методы вызываются. Есть ли что-то вроде view.setOnTouchListener() для GestureListener, который позволяет вам получать события? Заранее благодарю. Вот мой классКак получать сообщения от OnGestureListener

общественного класса GestureHandler реализует GestureDetector.OnGestureListener {

private static final int SWIPE_MIN_DISTANCE = 120; 
private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
private int direction = -1; 

@Override 
public boolean onDown(MotionEvent e) { 
    return true; 
} 

@Override 
public void onShowPress(MotionEvent e) { 

} 

@Override 
public boolean onSingleTapUp(MotionEvent e) { 
    return false; 
} 

@Override 
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
    return false; 
} 

@Override 
public void onLongPress(MotionEvent e) { 

} 

@Override 
public boolean onFling(MotionEvent event1, MotionEvent event2, 
         float velocityX, float velocityY) { 
    //Left Swipe 
    if(event1.getX() - event2.getX() > SWIPE_MIN_DISTANCE && 
      Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
     direction = 270; 
     Log.d("Swiped: ", direction + ""); 
     return true; 
     //Right Swipe 
    } else if(event2.getX() - event1.getX() > SWIPE_MIN_DISTANCE && 
      Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
     direction = 90; 
     Log.d("Swiped: ", direction + ""); 
     return true; 
    } 
    //Up Swipe 
    if(event1.getY() - event2.getY() > SWIPE_MIN_DISTANCE && 
      Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
     direction = 0; 
     Log.d("Swiped: ", direction + ""); 
     return true; 
     //Down Swipe 
    } else if(event2.getY() - event1.getY() > SWIPE_MIN_DISTANCE && 
      Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
     direction = 180; 
     Log.d("Swiped: ", direction + ""); 
     return true; 
    } 
    direction = -1; 
    Log.d("Swiped: ", direction + ""); 
    return false; 
} 

}

ответ

0

Очень простое решение здесь. :)

Вот как я это сделал в моем проекте, работая с Google Glass -

я фактически не распространяется GestureDetector. У меня было что-то вроде этого:

public class EXAMPLE { 
    private GestureDetector gestureDetector; 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     gestureDetector = createGestureDetector(this); 

    } 
    private GestureDetector createGestureDetector(Context context) { 
     GestureDetector gestureDetectorTemp = new GestureDetector(context, new GestureDetector.OnGestureListener() { 
      @Override 
      public boolean onDown(MotionEvent motionEvent) { 
       return false; 
      } 

      @Override 
      public void onShowPress(MotionEvent motionEvent) { 
       return false; 
      } 

      @Override 
      public boolean onSingleTapUp(MotionEvent motionEvent) { 
       return false; 
      } 
      @Override 
      public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent2, float distanceX, float distanceY) { 
       return false; 
      } 
      @Override 
      public void onLongPress(MotionEvent motionEvent) { 
      } 
      @Override 
      public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent2, float v, float v2) { 
      return false; 
      } 
     }); 
     return gestureDetectorTemp; 
    } 

    @Override 
    public boolean onGenericMotionEvent(MotionEvent event) { 
     if (gestureDetector != null) { 
      return gestureDetector.onTouchEvent(event); 
     } 
     return false; 
    } 
} 

Эта последняя часть очень важна. Если какое-либо событие общего события, если gestureDetector не равно null, вы отправите событие через gestureDetector для обработки.

KEEP IN MIND ТАКЖЕ, что вам нужно понять, что возвращает ложь; и вернуть true; вещи означают. Если вы вернете false, значит, это событие не было уничтожено. Если вы вернете true, событие будет потреблено. Другими словами, если вы вернете true, тогда ничего не активируется, потому что событие получает «съедено», но если вы вернете false, это отправит событие на другие функции, которые могут что-то сделать, когда действие будет предпринято.

Надеюсь, это поможет. Удачи :)

Смежные вопросы