Comment désactiver ou activer viewpager glisser dans android
Ce que je suis en train de faire: je suis en train d'Activer/désactiver le glisser dans pager par programme lorsque le programme est en cours d'exécution
Ex: Lorsque le flux si je vérifie une condition et si elle renvoie true
permettre de glisser, et si la condition renvoie false
désactiver le balayage.
La Solution que j'utilise est ce un
public class CustomViewPager extends ViewPager {
private boolean enabled;
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.enabled = true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onTouchEvent(event);
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onInterceptTouchEvent(event);
}
return false;
}
public void setPagingEnabled(boolean enabled) {
this.enabled = enabled;
} }
Puis sélectionnez ceci à la place de la builtin viewpager en XML
<mypackage.CustomViewPager
android:id="@+id/myViewPager"
android:layout_height="match_parent"
android:layout_width="match_parent" />
Vous avez juste besoin d'appeler le "setPagingEnabled" la méthode du "faux" et les utilisateurs ne seront pas en mesure de passer à la pagination.
Problème avec la méthode ci-dessus: je ne peux pas définir la propriété sur le flux, I:e .... Je l'ai peut permettre de glisser ou de désactiver le balayage. Mais je ne peux pas le faire en se fondant sur la condition
Question:
- Puis-je atteindre mon objectif dans quelques-autre manière, si oui quel est-il ?
- Ou n'est-ce pas possible ?
- Double Possible de Comment désactiver la pagination en balayant l'écran avec un doigt dans la ViewPager mais encore être en mesure de passer par programmation?
- Ne serait-il pas possible de définir la propriété sur le flux avec la liaison de données ?
- Essayez d'utiliser stackoverflow.com/a/42687397/4559365
Vous devez vous connecter pour publier un commentaire.
Désactiver le balayage progmatically par
et de l'utiliser pour glisser manuellement
onInterceptTouchEvent()
(return true, par exemple), les points de vue à l'intérieur de ViewPager ne recevrez pas d'entrée. Qui est pas ce que vous voulez dans la plupart des cas.Meilleure solution pour moi.
-Tout d'abord, vous créez une classe comme ceci:
-Ensuite le modifier dans votre mise en page:
<android.support.v4.view.ViewPager
pour ce
<com.mypackage.CustomViewPager
-Enfin, vous pouvez le désactiver:
view_pager.disableScroll(true);
ou de l'activer:
view_pager.disableScroll(false);
J'espère que cela vous aidera 🙂
disable == true
. PrimordialonInterceptTouchEvent()
n'est pas la bonne solution.Dans votre affichage personnalisé pager adaptateur, remplacer ces méthodes dans
ViewPager
.Et pour l'activer, il suffit de retourner chaque
super
méthode:super.onInterceptTouchEvent(event)
etsuper.onTouchEvent(event)
.Dans mon cas, la solution simplifiée a bien fonctionné.
Le remplacement de la méthode doit être dans votre personnalisé viewpager adaptateur pour remplacer TouchEvent auditeurs et faire em gel;
this.enabled == false
. PrimordialonInterceptTouchEvent()
n'est pas la bonne solution.J'ai trouvé une autre solution qui a fonctionné pour moi de suivre ce lien
https://stackoverflow.com/a/42687397/4559365
Essentiellement, il remplace la méthode
canScrollHorizontally
pour désactiver le balayage par le doigt. Quelle qu'en soit lasetCurrentItem
fonctionne toujours.canScrollHorizontally()
méthode n'a aucun effet dans le scénario actuel. Il n'est même pas appelé lorsque le balayage se passe.Pour désactiver le balayage
Pour activer le balayage
if (mViewPager.isFakeDragging())
mViewPager.endFakeDrag();
Cela a fonctionné pour moi.