Alors, ma solution est:
- Intercept l'événement OnTouch et calculer si la page doit passer à la suivante ou continuer à la
actuelle
- Hériter de HorizontalScrollView et remplacer la méthode computeScroll
La méthode computeScroll l'appelé pour déplacer la liste. Par défaut je suppose qu'il est implémenté pour décélérer avec un certain ratio ... Puisque je ne veux pas ce mouvement, je l'écrase juste sans spécifier un corps.
Le code pour le gestionnaire d'événements est:
_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;
}
});
Et dans mon hérité HorizontalScrollView
@Override
public void computeScroll (){
return;
}
Vérifiez ce tutoriel, il fonctionne et est très simple pour un échange horizontal: [http://mobile.tutsplus.com/tutorials/android/android-user-interface-design- horizontal-view-paging /] (http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-horizontal-view-paging/) – pedrotorres