У меня есть LinearLayout в HorizontalScrollView. Содержание является просто изображением. При прокрутке я должен достигнуть того же поведения, которое Вы получаете при установке опции подкачки страниц на iPhone, эквивалентный из HSW (прокрутка списка должна остановиться на уровне каждой страницы в списке, не продолжить перемещаться).
Как это сделано в Android? Я должен реализовать это функции один или существует особое свойство для установки или подкласс HSV для реализации?
Итак, мое решение:
Метод computeScroll вызывается для перемещения списка. По умолчанию, я полагаю, реализовано замедление с определенным соотношением ... Поскольку мне не нужно это движение, я просто отменяю его без указания тела.
Код обработчика событий:
_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;
}