Я пробую здесь дикую идею, помещая настраиваемый элемент управления в элементы определенного представления списка. Элемент управления «активируется», только если пользователь касается определенной точки срабатывания, а затем он может «перетаскивать».
Мой вопрос в том, что я могу сделать в onTouchEvent(...), чтобы предотвратить получение события и прокрутку списка. Прямо сейчас я могу коснуться и захватить элемент управления, но если я слишком сильно двигаю пальцем вверх или вниз, список берет верх и начинает прокручиваться, тогда мое представление даже не получает событие ACTION_UP.
Вот мой текущий код onTouchEvent:
if (e.getAction() == MotionEvent.ACTION_DOWN) {
Log.d("SwipeView", "onTouchEvent - ACTION_DOWN" + e.getX() + " " + e.getY());
int midX = (int)(this.getWidth() / 2);
int midY = (int)(this.getHeight() / 2);
if (Math.abs(e.getX() - midX) < 100 &&
Math.abs(e.getY() - midY) < 100) {
Log.d("SwipeView", "HEY");
setDragActive(true);
}
this.invalidate();
return true;
} else if (e.getAction() == MotionEvent.ACTION_MOVE) {
_current[0] = e.getX();
_current[1] = e.getY();
this.invalidate();
return true;
} else if (e.getAction() == MotionEvent.ACTION_UP) {
_current[0] = 0;
_current[1] = 0;
setDragActive(false);
this.invalidate();
return true;
}
Я уверен, что это как-то связано с иерархией событий.