Le Scroll horizontal facile en Android
Par Nicolas FRANCOIS le jeudi 26 mai 2011, 09:47 - Android - Lien permanent
Dans un souci d'ergonomie, le scroll horizontal est bien appréciable, par
exemple pour passer à l'écran suivant. Même si la fonctionnalité est utilisé,
pour se déplacer entre les écrans du home, il n'existe pas de composants qui
gère cela. Comme bien, souvent, c'est dans l'open source que l'on trouve une
solution.
C'est sur github que j'ai trouvé View Flow for Android qui
offre une solution simple à intégrer. En fin de compte, ce comportement de
scroll horizontal, c'est une sorte de ListView à défilement horizontal où une
cellule = un écran. C'est sur ce principe que se base cette api. Elle offre un
composant ViewFlow qui nécessite un BaseAdapter pour réaliser l'affichage de
chacun de ses écrans.
viewFlow = (ViewFlow) findViewById(R.id.viewflow); viewFlow.setAdapter(new MonAdapter());
<org.taptwo.android.widget.ViewFlow
android:id="@+id/viewflow"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
app:sidebuffer="3"/>
Qu'est ce que ce sidebuffer ?
Il s'agit tout simplement du buffer des écrans chargés; ce qui permet de
fluidifier le scroll. Avec la valeur 3, j'aurai jusqu'à 3 écrans à droite, 3
écrans à gauche ainsi que mon écran actuel, soit 7 écrans, qui sont chargés et
en mémoire. Cette valeur, est à 3 par défaut.
Et si j'ai besoin d'écouter le changement d'écran ?
Ca tombe bien, il existe un ViewSwitchListener
viewFlow.setOnViewSwitchListener(new ViewSwitchListener() {
public void onSwitched(View v, int position) {
// Your code here
}
});
Certains Home Android, affiche un indicateur de position afin de connaitre
celui sur lequel nous nous trouvons. View Flow for Android offre aussi cette
possibilité. A l'heure actuelle, il en existe 2
- Cercle
CircleFlowIndicator indic = (CircleFlowIndicator) findViewById(R.id.viewflowindic); viewFlow.setFlowIndicator(indic);

- Texte
TitleFlowIndicator indicator = (TitleFlowIndicator) findViewById(R.id.viewflowindic); indicator.setTitleProvider(myTitleProvider); viewFlow.setFlowIndicator(indicator);

Je trouve cette api sympathique à utiliser, et espère y voir de nouvelles
fonctionnalités.
Comme beaucoup pour beaucoup de projet sur github, les contributions sont les
bienvenues, si vous avez des idées, n'hésitez pas.
