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:
- ¿Puedo lograr mi objetivo de alguna otra manera? De ser así, ¿qué es?
- 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);