2015-06-10 4 views
2

Как обнаружить проведите пальцем и нажмите в onTouch метод? Я хочу, чтобы одно из двух действий выполнялось, когда я прокручивал и прочее, когда я просто касался. Вам нужно знать, как отличить разницу между краном и салфеткой.Обнаружение жестов прокрутки и касания

Вот мой код:

@Override 
public boolean onTouch(View v, MotionEvent event) { 
if (event.getAction() == MotionEvent.ACTION_MOVE) { 
    mGestureDetector.onTouchEvent(event); 
} 
switch(event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     x1 = event.getX(); 
     y1 = event.getY(); 
     break; 
    case MotionEvent.ACTION_UP: 
     x2 = event.getX(); 
     y2 = event.getY(); 

     float deltaX = x2 - x1; 
     float deltaY = y2 - y1; 

     if (Math.abs(deltaX) > MIN_DISTANCE) { 
      mGestureDetector.onTouchEvent(event); 
     }else if (Math.abs(deltaX) < MIN_DISTANCE) { 
      mGestureDetector.onTouchEvent(event); 
     }else if (Math.abs(deltaY) > MIN_DISTANCE) { 
      mGestureDetector.onTouchEvent(event); 
     }else if (Math.abs(deltaY) < MIN_DISTANCE) { 
      mGestureDetector.onTouchEvent(event); 
     } 
     break; 
} 
return true; 

}

ответ

0

Вот что вы можете сделать, обнаружили на this link В OnCreate деятельности, добавьте это.

final GestureDetector gestureDetector = new GestureDetector(new GestureListener()); 
calendar.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(final View view, final MotionEvent event) { 
    if (gestureDetector.onTouchEvent(event)) { 
     return false; 
    } 
    return true; 
    } 
}); 

А вот GestureDetector Класс

class GestureListener extends SimpleOnGestureListener { 
    @Override 
    public boolean onSingleTapConfirmed(MotionEvent event) { 
    // Trigger the touch event on the calendar 
     calendar.onTouchEvent(event); 
     return super.onSingleTapUp(event); 
    } 

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    ViewConfiguration viewConfiguration = ViewConfiguration.get(EventsActivity.this); 
    int minSwipeDistance = viewConfiguration.getScaledPagingTouchSlop(); 
    int minSwipeVelocity = viewConfiguration.getScaledMinimumFlingVelocity(); 
    int maxSwipeOffPath = viewConfiguration.getScaledTouchSlop(); 
    if (Math.abs(e1.getY() - e2.getY()) > maxSwipeOffPath) { 
     return false; 
    } 

    if (Math.abs(velocityX) > minSwipeVelocity) { 
    // Right to left swipe 
     if (e1.getX() - e2.getX() > minSwipeDistance) { 
     calendar.nextMonth(); 
    } 

    // Left to right 
    else if (e2.getX() - e1.getX() > minSwipeDistance) { 
     calendar.previousMonth(); 
    } 

    // Call some app-related functions to update the display 
    displayDate(calendar.getMonth(), calendar.getYear()); 
    } 
    return false; 
} 
} 
+0

Спасибо за ответ. Это не работает. Я пытаюсь реализовать жесты на собственной мягкой клавиатуре, чтобы, например, менять экран с qwerty на числовой, и если вы просто нажимаете на одну букву, которая будет печатать эту букву. Моя клавиатура отлично работает с методами onSwipe, но это не точно. Этот код, который я опубликовал, более точен, чем ваш. Поэтому, если вы можете сказать мне, как сказать разницу между прикосновением и салфеткой. Я пробовал что-то в этом коде, который я разместил, но я могу только прокручивать, не касаться одной буквы. – jelic98

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