J'ai un LinearLayout à l'intérieur d'un HorizontalScrollView. Le contenu n'est qu'une image. Lors du défilement, je dois obtenir le même comportement que celui obtenu lors de la définition de l'option de pagination sur un équivalent iPhone du HSW (le défilement de la liste doit s'arrêter à chaque page de la liste, ne pas continuer à se déplacer).
Comment cela se fait-il sous Android? Dois-je implémenter ces fonctionnalités moi-même ou il existe une propriété particulière à définir ou une sous-classe de HSV à implémenter?
Donc, ma solution est:
La méthode computeScroll l'appelé pour déplacer la liste. Par défaut, je suppose qu'il est implémenté pour ralentir avec un certain rapport ... Comme je ne veux pas de ce mouvement, je le remplace simplement sans spécifier de corps.
Le code du 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;
}
Je suis tombé sur une bonne solution ici:
il s'agit d'une version GitHub nettoyée du code trouvé ici:
Cela peut sembler exagéré de simplement l'utiliser sur des images, mais cette solution permet une pagination infinie avec une petite astuce (c'est-à-dire: lorsque sur la première page, vous pouvez revenir à la dernière page et lorsque sur la dernière page, vous pouvez faire défiler vers la première page ). Il vous permet également d'avoir un nombre inconnu de pages et de générer dynamiquement du contenu en utilisant une autre petite astuce. S'il vous plaît voir mon commentaire dans le deuxième lien ici
pour plus de détails sur la façon dont j'ai accompli cela.
J'espère que cela t'aides.
Le nouveau package de compatibilité (révision 3) dans Android a ajouté un ViewPager qui fait cela.