如何阻止ViewPager滑動 – 解決方法

一、使用自定義ViewPager實現阻止滑動

通過自定義ViewPager,我們可以重寫其onTouchEvent()和onInterceptTouchEvent()方法來實現阻止ViewPager的滑動。


public class CustomViewPager extends ViewPager {

    private boolean isPagingEnabled = true;

    public CustomViewPager(Context context) {
        super(context);
    }

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

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

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

    public void setPagingEnabled(boolean b) {
        this.isPagingEnabled = b;
    }
}

在setPagingEnabled()方法中,我們可以控制ViewPager的滑動功能。

二、使用addOnPageChangeListener實現阻止滑動

我們可以通過實現addOnPageChangeListener()方法,並在onPageScrolled()中控制ViewPager的滑動來實現阻止ViewPager的滑動功能。


viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        //阻止ViewPager的滑動
        viewPager.scrollTo(0, 0);
    }

    @Override
    public void onPageSelected(int position) {
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }
});

在onPageScrolled()方法中,我們控制ViewPager的滑動,返回(0,0)可以阻止ViewPager的滑動。

三、修改ViewPager的滑動速度實現阻止滑動

我們可以修改ViewPager的滑動速度來實現阻止ViewPager的滑動,即將滑動速度設置為0。


public class CustomScroller extends Scroller {

    private int mDuration = 0;

    public CustomScroller(Context context) {
        super(context);
    }

    public CustomScroller(Context context, Interpolator interpolator) {
        super(context, interpolator);
    }

    public CustomScroller(Context context, Interpolator interpolator, boolean flywheel) {
        super(context, interpolator, flywheel);
    }

    @Override
    public void startScroll(int startX, int startY, int dx, int dy, int duration) {
        super.startScroll(startX, startY, dx, dy, mDuration);
    }

    @Override
    public void startScroll(int startX, int startY, int dx, int dy) {
        super.startScroll(startX, startY, dx, dy, mDuration);
    }

    public void setScrollDuration(int duration) {
        mDuration = duration;
    }
}

通過自定義Scroller,我們可以修改ViewPager的滑動速度,將其設置為0即可阻止ViewPager的滑動。使用時,我們需要在ViewPager中設置CustomScroller。

四、禁用ViewPager的滑動功能實現阻止滑動

我們可以使用setUserInputEnabled()方法,禁用ViewPager的滑動功能。


viewPager.setUserInputEnabled(false);

此方法會禁用ViewPager的滑動功能,從而實現阻止ViewPager的滑動。

原創文章,作者:WEYW,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/146086.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
WEYW的頭像WEYW
上一篇 2024-10-29 18:58
下一篇 2024-10-29 18:58

相關推薦

發表回復

登錄後才能評論