У меня есть кнопка, которую я оживляю при нажатии кнопки. Я хочу, чтобы он вернулся в свое «нормальное» состояние после того, как я перетащил за пределы определенного порога.Как мне заставить перестать слушать события касания после ACTION_MOVE?
Я создаю прямоугольник границ обзора на ACTION_DOWN
и проверьте, не находится ли он из области касания в ACTION_MOVE
. Я успешно обнаруживаю прикосновение «вне границ», но я не могу получить представление, чтобы перестать слушать прикосновения. Это похоже на то, что он игнорирует мой метод animateToNormal().
Я попытался изменить возвращаемое значение boolean на true вместо false, что не помогло. Я также попытался удалить прослушиватель прикосновений в случае ACTION_MOVE
(установить нуль), но мне нужно снова подключиться, чтобы продолжить прослушивание касаний. Я полагаю, что могу добавить произвольную задержку, прежде чем добавлять ее обратно, но это кажется ужасным взломом.
Я тестирую это на устройстве 4.2 (LG G2).
private static class AnimationOnTouchListener implements View.OnTouchListener {
private Rect rect;
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch(motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
rect = new Rect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom());
animatePressed();
return false;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
// back to normal state
animateBackToNormal();
return false;
case MotionEvent.ACTION_MOVE:
if(!rect.contains(view.getLeft() + (int) motionEvent.getX(), view.getTop() + (int) motionEvent.getY())){
d(TAG, "out of bounds");
animateBackToNormal();
// STOP LISTENING TO MY TOUCH EVENTS!
} else {
d(TAG, "in bounds");
}
return false;
default:
return true;
}
}
Забавно, у меня есть другая проблема. Я хочу продолжать получать события, но я этого не делаю. http://stackoverflow.com/questions/34908569/android-continue-receiving-touch-events-in-a-view-after-the-touch-is-dragged –