Я следую руководству по обнаружению распространенных жестов. Я связался с библиотекой android-support-v4.jar
, чтобы получить GestureDetectorCompat
, и мой код выглядит точно так же, как в руководстве, за исключением того, что я обнаруживаю жесты в своем пользовательском представлении, а не в действии:
public class MyGlView extends GLSurfaceView {
private GestureDetectorCompat m_gestureDetector = null;
public MyGlView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public MyGlView(Context context) {
super(context);
init(context);
}
private void init(Context context) {
if (m_gestureDetector == null)
m_gestureDetector = new GestureDetectorCompat(context, new MyGestureListener());
setEGLContextClientVersion(2);
setRenderer(new DrawSurfRenderer());
setRenderMode(RENDERMODE_CONTINUOUSLY);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
m_gestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
public class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
Log.e("", "OnScroll: deltaX=" + String.valueOf(e2.getX() - e1.getX()) + ", deltaY=" + String.valueOf(e2.getY() - e1.getY()));
return true;
}
@Override
public boolean onSingleTapUp(MotionEvent e)
{
Log.e("", "onSingleTapUp: X=" + String.valueOf(e.getX()) + ", Y=" + String.valueOf(e.getY()));
return true;
}
@Override
public void onLongPress(MotionEvent e)
{
Log.e("", "onLongPress: X=" + String.valueOf(e.getX()) + ", Y=" + String.valueOf(e.getY()));
}
}
Что бы я ни делал с сенсорным экраном, я получаю только onLongPress
. На самом деле, когда я делаю быстрое касание (быстро касаясь экрана и отпуская его), я все еще получаю немного onLongPress
после того, как убираю палец с экрана (подозреваю, что это длинная задержка обнаружения касания).
В чем подвох?
return super.onTouchEvent(event);
наreturn false;
? И попробуйте свои действия в простом представлении (например, в WebView). - person   schedule 01.11.2013return false;
ничего не меняет. - person Violet Giraffe   schedule 01.11.2013onDown
, который возвращает true, к вашему методуonTouchEvent
. - person   schedule 01.11.2013onLongPress
, потому чтоMotionEvent.ACTION_DOWN
никогда не обрабатывалось\не обращалось на ваш жестДетектор. Вы всегда будете даватьACTION_UP
. Почему нет ACTION_MOVE? Потому что в Android Action_Move прецессируется после того, как он дает Action_UP. Таким образом, детектор жестов будет обрабатывать ваши действия, как долгое нажатие. - person   schedule 01.11.2013onDown
не является абстрактным... - person Violet Giraffe   schedule 01.11.2013