Обработка касания экрана: остановка при MotionEvent.ACTION_MOVE
Есть рабочий кусок обработки касания. Основные задачи:
- обработка при движении
- обработка при отпускании пальца с экрана
Если нажать на экран, но не двигать пальцем - ничего не произойдет. Так и надо. НО если подвигать пальцем, а потом остановится, то будет продолжать работать часть MotionEvent.ACTION_MOVE, а я этого не хочу.
Как заставить MotionEvent.ACTION_MOVE не работать при "простое" пальца?
А если точнее, "как обработать момент, когда палец остановился, но еще не убран с экрана?"
web.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: // нажатие
break;
case MotionEvent.ACTION_MOVE: // движение
// код для движения
break;
case MotionEvent.ACTION_UP: // отпускание
case MotionEvent.ACTION_CANCEL:
// код для отпускания
break;
}
return false;
}
});
UP for @ВасяВоронцов
Вот Ваш пример. Если двигать пальцем только по горизонтали / вертикали экрана - всегда будет показываться "стоп". А если по диагонали экрана, то будет только "движение", даже когда палец остановлен.
case MotionEvent.ACTION_DOWN: // нажатие
a = event.getX(); //Назначим точки
b = event.getY();
break;
case MotionEvent.ACTION_MOVE: // движение
if (a != event.getX() && b != event.getY()) {
Log.e("sdfg", "движение");
} else {
Log.e("sdfg", "стоп");
}
a = event.getX(); //Обновим точки
b = event.getY();
Ответы (1 шт):
Что значит "простой" пальца? Это значит, что координаты точки касания не меняются. Так и напишем.
web.setOnTouchListener(new View.OnTouchListener() {
float x, y;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: // нажатие
x = event.getX(); //Назначим точки
y = event.getY();
break;
case MotionEvent.ACTION_MOVE: // движение
if (x != event.getX() && y != event.getY()) {
// код для движения
};
x = event.getX(); //Обновим точки
y = event.getY();
break;
case MotionEvent.ACTION_UP: // отпускание
case MotionEvent.ACTION_CANCEL:
// код для отпускания
break;
}
return true;
}
});
Если координаты точки касания не изменились после последнего события движения, то палец покоится.
UPD
Не знаю, почему это работает с кнопкой.
Когда вы касаетесь экрана, срабатывает событие ACTION_DOWN, но метод onTouch возвращает false, поэтому дальнейшего отслеживания действия не происходит.
Звмена возвращаемого значения на true решает проблему.