您的位置:

如何禁止Android ViewPager滑动

一、使用自定义ViewPager

1、首先我们需要自定义一个ViewPager,在这个ViewPager中,我们可以重写ViewPager的一些方法,以此来达到禁止ViewPager滑动的目的。

2、我们可以重写onTouchEvent方法,返回false表示不响应手势事件,从而达到禁止ViewPager滑动的效果。

public class CustomViewPager extends ViewPager {
    private boolean scrollable;

    public CustomViewPager(Context context) {
        super(context);
        scrollable = true;
    }

    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        scrollable = true;
    }

    public void setScrollable(boolean scrollable) {
        this.scrollable = scrollable;
    }

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

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

二、使用自定义Fragment

1、如果我们要禁止ViewPager滑动,我们也可以重写Fragment中的onTouchEvent方法,从而达到禁止ViewPager滑动的目的。

2、我们可以在Fragment中添加一个标识,表示当前Fragment是否响应手势事件,如果标识为false,那么就返回false。

public class CustomFragment extends Fragment {
    private boolean scrollable = true;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_custom, container, false);
        view.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return scrollable;
            }
        });
        return view;
    }

    public void setScrollable(boolean scrollable) {
        this.scrollable = scrollable;
    }
}

三、使用反射

1、我们可以在ViewPager中,使用反射来修改ViewPager中的mScroller字段,从而禁止ViewPager滑动。

2、我们可以在Activity的onCreate方法中,使用反射得到ViewPager的mScroller字段,然后将这个字段替换成一个不会滚动的Scroller。

public class MainActivity extends AppCompatActivity {
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initViewPager();
        disableViewPagerScroll();
    }

    private void initViewPager() {
        viewPager = findViewById(R.id.viewPager);
        viewPager.setAdapter(new PagerAdapter(getSupportFragmentManager()));
    }

    private void disableViewPagerScroll() {
        try {
            Field mScroller = ViewPager.class.getDeclaredField("mScroller");
            mScroller.setAccessible(true);
            mScroller.set(viewPager, new Scroller(this, new DecelerateInterpolator()) {
                @Override
                public void startScroll(int startX, int startY, int dx, int dy, int duration) {
                    //Do nothing.
                }
            });
        } catch (NoSuchFieldException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}
如何禁止Android ViewPager滑动

2023-05-18
如何禁止ViewPager左右滑动

2023-05-18
如何阻止ViewPager滑动 - 解决方法

2023-05-18
ios禁止侧滑js,ios如何禁止页面滑动

2022-11-23
Android ViewPage: 初识多页面滑动

2023-05-20
Viewpager2禁止滑动的多个方面分析

2023-05-20
Android ViewPager优化实践:提高界面流畅度

Android应用中,ViewPager是一个极其常用的控件,它可以帮助我们实现多页面滑动浏览的效果。但在使用时,我们经常会遇到ViewPager卡顿、滑动不流畅的问题,这不仅会影响用户的使用体验,更

2023-12-08
Swiper禁止手动滑动完全解读

2023-05-20
提升移动应用导航栏用户体验的法宝——TabLayout和Vi

2023-05-14
Android 3D画廊详解

2023-05-20
提升移动应用体验的有效方法:打造高效、精美的Android

2023-05-17
印象笔记记录java学习(Java成长笔记)

2022-11-12
Android启动速度提升的秘诀

2023-05-14
让您的Android App滚动得更流畅

2023-05-14
Android禁止截屏的实现

2023-05-22
移动端滑动事件详解

2023-05-20
glideoverride详解

2023-05-21
java学习笔记(java初学笔记)

2022-11-14
Android BaseAdapter使用技巧:让列表滑动更

Android中的BaseAdapter是用来填充ListView、GridView和Spinner等组件的重要适配器,它的作用是根据数据来创建列表的每个项。然而,使用BaseAdapter时,我们有

2023-12-08
MagicIndicator介绍,如何提升移动端App用户体

2023-05-16