Используйте GestureDetector, чтобы определить, является ли событие касания прокруткой.
Если первым событием первого вызова onScroll является ACTION_DOWN, то вы должны увидеть, была ли это горизонтальная прокрутка с преобладанием. Если это так, то ваша прокрутка запускается, и вы должны сместить абсолютную позицию представления, которое заполняет страницу.
Об абсолютном позиционировании, не осуждаемом, см. Мой ответ здесь Android: альтернатива AbsoluteLayout (мне действительно нужно абсолютное позиционирование)
Вы захотите получить предупреждение о том, возвращаете ли вы true, чтобы использовать события касания или нет.
GestureDetector не имеет обратного вызова для остановки прокрутки. Перед вызовом GestureDetector.onTouchEvent вам нужно будет проверить, был ли ACTION_UP, и если было выполнено действие, и у вас действительно была незавершенная прокрутка, вам следует установить абсолютную позицию в месте назначения и использовать TranslateAnimation, чтобы он выглядел хорошо. перемещение от текущего к месту назначения.
Edit:
GestureDetector не работал вообще, если дочерние представления также хотели реагировать на сенсорные события. Я закончил тем, что создал подкласс FrameLayout (один из самых основных макетов и наиболее близкий к неинтрузивному родительскому представлению) и переопределил dispatchTouchEvent. Я просто взял все события и сам обнаружил.