viewpager studio sectionspageradapter fragments example android android-viewpager

sectionspageradapter - viewpager android studio



Cómo deshabilitar o habilitar el deslizamiento del visor en Android (7)

Lo que estoy tratando de hacer: estoy tratando de habilitar / deshabilitar deslizar en el buscapersonas programáticamente cuando el programa se está ejecutando

Por ejemplo: cuando estoy en el flujo si verifico una condición y si devuelve true habilite el deslizamiento, y si la condición devuelve false deshabilite el deslizamiento.

La solución que estoy usando es esta

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; } }

Luego seleccione esto en lugar del visor incorporado en XML

<mypackage.CustomViewPager android:id="@+id/myViewPager" android:layout_height="match_parent" android:layout_width="match_parent" />

Solo necesita llamar al método "setPagingEnabled" con "false" y los usuarios no podrán deslizarse para paginar.

Problema con la metodología anterior: no puedo establecer la propiedad en el flujo, I: e .... Puedo habilitar el deslizamiento o desactivarlo. Pero no puedo hacer esto por condición

Pregunta:

  1. ¿Puedo lograr mi objetivo de alguna otra manera? De ser así, ¿qué es?
  2. O esto no es posible ?

En mi caso, la solución simplificada funcionó bien. El método de anulación debe estar en su adaptador de visor personalizado para anular los oyentes TouchEvent y hacer que se congelen;

mViewPager.beginFakeDrag();


En su adaptador de buscapersonas personalizado, anule esos métodos en ViewPager .

@Override public boolean onInterceptTouchEvent(MotionEvent event) { // Never allow swiping to switch between pages return false; } @Override public boolean onTouchEvent(MotionEvent event) { // Never allow swiping to switch between pages return false; }

Y para habilitar, solo devuelve cada super método:

super.onInterceptTouchEvent(event) y super.onTouchEvent(event) .


Encontré otra solución que funcionó para mí, siga este enlace

https://.com/a/42687397/4559365

Básicamente anula el método canScrollHorizontally para deshabilitar canScrollHorizontally con el dedo. setCurrentItem embargo, setCurrentItem todavía funciona.


Esto funcionó para mí.

ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() { public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // disable swipe if(!swipeEnabled) { if (viewPager.getAdapter().getCount()>1) { viewPager.setCurrentItem(1); viewPager.setCurrentItem(0); } } } public void onPageScrollStateChanged(int state) {} public void onPageSelected(int position) {} }; viewPager.addOnPageChangeListener(onPageChangeListener);


La mejor solución para mi. -Primero, creas una clase como esta:

public class CustomViewPager extends ViewPager { private Boolean disable = false; public CustomViewPager(Context context) { super(context); } public CustomViewPager(Context context, AttributeSet attrs){ super(context,attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent event) { return !disable && super.onInterceptTouchEvent(event); } @Override public boolean onTouchEvent(MotionEvent event) { return !disable && super.onTouchEvent(event); } public void disableScroll(Boolean disable){ //When disable = true not work the scroll and when disble = false work the scroll this.disable = disable; } }

-Entonces cambie esto en su diseño: <android.support.v4.view.ViewPager para este <com.mypackage.CustomViewPager

-Finalmente, puede deshabilitarlo: view_pager.disableScroll(true); o habilitarlo: view_pager.disableScroll(false);

Espero que esto te ayude :)


Para deshabilitar el deslizamiento

@Override public boolean onTouchEvent(MotionEvent event) { return this.enabled && super.onTouchEvent(event); } @Override public boolean onInterceptTouchEvent(MotionEvent event) { return this.enabled && super.onInterceptTouchEvent(event); }

Para habilitar deslizar

if (mViewPager.isFakeDragging()) mViewPager.endFakeDrag();


Deshabilitar deslizar progmáticamente por-

final View touchView = findViewById(R.id.Pager); touchView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } });

y use esto para deslizar manualmente

touchView.setCurrentItem(int index);