Итак, мое решение:
- Перехватить событие onTouch и рассчитать, должна ли страница перейти на следующую или сохранить текущее
- Наследовать от HorizontalScrollView и переопределить методcomputeScroll
Метод computeScroll the вызвал, чтобы переместить список.По умолчанию я предполагаю, что он реализован для замедления с определенным отношением ... Так как я не хочу это движение, я просто переопределяю его без указания тела.
Код для обработчика событий:
_scrollView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP)
{
float currentPosition = _scrollView.getScrollX();
float pagesCount = _horizontalBar.getChildCount();
float pageLengthInPx = _horizontalBar.getMeasuredWidth()/pagesCount;
float currentPage = currentPosition/pageLengthInPx;
Boolean isBehindHalfScreen = currentPage-(int)currentPage > 0.5;
float edgePosition = 0;
if(isBehindHalfScreen)
{
edgePosition = (int)(currentPage+1)*pageLengthInPx;
}
else
{
edgePosition = (int)currentPage*pageLengthInPx;
}
_scrollView.scrollTo((int)edgePosition, 0);
}
return false;
}
});
И в моем унаследованном HorizontalScrollView
@Override
public void computeScroll (){
return;
}