Contrôler le sens de ViewPager vous pouvez faire défiler, de façon dynamique avec INTERFACE utilisateur commentaires
Je travaille sur une application qui utilise de nombreuses pages à feuilleter, cependant, à certaines pages que je voudrais être en mesure d'empêcher le défilement de la page suivante jusqu'à ce qu'ils ont sélectionné quelque chose.
Au moment où je l'ai étendu ViewPager:
/* (non-Javadoc)
* @see android.support.v4.view.ViewPager#onInterceptTouchEvent(android.view.MotionEvent)
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.canGoLeft || this.canGoRight) {
return super.onInterceptTouchEvent(event);
}
return false;
}
/* (non-Javadoc)
* @see android.support.v4.view.ViewPager#onTouchEvent(android.view.MotionEvent)
*/
@Override
public boolean onTouchEvent(MotionEvent ev) {
boolean lockScroll = false;
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = ev.getX();
lockScroll = false;
return super.onTouchEvent(ev);
case MotionEvent.ACTION_MOVE:
if (canGoLeft && lastX < ev.getX()) {
lockScroll = false;
} else if (canGoRight && lastX > ev.getX()) {
lockScroll = false;
} else {
lockScroll = true;
}
lastX = ev.getX();
break;
}
lastX = ev.getX();
if (lockScroll) {
//make callback to prevent movement
if (mOnPreventCallback != null) {
mOnPreventCallback.onPreventMovement();
}
return false;
} else {
return super.onTouchEvent(ev);
}
}
Note: j'ai essayé de mettre en œuvre empêcher de glisser à la précédente, cependant vous pouvez toujours glisser à la page précédente, mais vous avez besoin de passer de l'extrémité gauche et faites glisser vers la droite un peu. Il est capricieux, mais il n'empêche pas de glisser complètement.
Trois choses que je veux faire ici:
- Empêcher le défilement à l'écran suivant jusqu'à ce qu'ils ont sélectionné un article ou quelque chose
- Empêcher le défilement à l'écran précédent dans l'ensemble (partiellement mis en œuvre)
- Donner de la rétroaction à l'utilisateur de montrer que le défilement est désactivé, comme la façon dont Android montre le haut et le bas des écrans avec un dégradé.
OriginalL'auteur Tim Kist | 2012-11-07
Vous devez vous connecter pour publier un commentaire.
Quand j'ai été confronté à un problème similaire, j'ai fait mon propre Écouteur avec un gestureDetector et fait-il pas répondre à balayage à tous, vous pouvez facilement ajuster pour ne pas répondre à glisser vers la droite que sous certaines conditions. Cela devrait répondre à vos numéros 1 et 2.
C'est de l'auditeur:
et c'est un exemple d'utilisation :
Il y a peut être plus simple et plus élégante solution, mais cela a bien fonctionné pour moi.
OriginalL'auteur slezadav
J'ai été googler haute et basse pour une bonne façon de résoudre ce problème...
J'ai essayé primordial ontouchevent etc...
J'ai décidé que c'était la meilleure solution pour moi (et moins hacky)..
était juste pour mettre en œuvre un maximum ou minimum tracker et le régler à la page en cours
puis ajouter à la onPageSelected" méthode:
par conséquent, lorsque les conditions sont remplies, vous augmentez simplement la maxpage par un..
remarque que cela ne va pas empêcher l'utilisateur de défilement... ça empêche vue pager de changer de pages.
OriginalL'auteur BtzX
Je ne pense pas que l'extension de ViewPager est nécessaire. Ce que vous devez faire est de modifier la liste des pages fournies à la PagerAdapter à la volée. Ce qui signifie que, vous de vérifier si une certaine page est marqué "terminé" et ensuite seulement ajouter de la page suivante pour la liste. C'est comment ViewPager œuvres.
Prendre un coup d'oeil à Roman Nurik de l'assistant-pager mise en œuvre. Dans MainActivity il existe une méthode appelée recalculateCutOffPage qui fait ce que je dit.
Résout être en mesure d'empêcher le passage des doigts à droite mais pas à gauche. Ma solution a été d'une combinaison de WizardPager et personnalisé ViewPager
OriginalL'auteur Nimrod Dayan
vous pouvez utiliser votre affichage personnalisé pager
}
OriginalL'auteur Dedaniya HirenKumar
J'ai mises en œuvre viewpager pour un assistant avec un max la page que l'utilisateur ne peut pas passer.
À la fin la solution était dans l'adaptateur.
J'ai changé le comte de la PagerAdapter et de cette façon, les blocs à l'utilisateur de passer le max de page:
Lorsque l'utilisateur passe à la page suivante:
De cette façon, lorsque l'utilisateur est au max la page, il ne peut pas faire défiler vers la droite jusqu'à ce que le progrès est mis à jour.
Si vous souhaitez désactiver le balayage complètement regardez ici http://stackoverflow.com/questions/9650265/how-do-disable-paging-by-swiping-with-finger-in-viewpager-but-still-be-able-to-s
OriginalL'auteur Aviv Mor