禁用ViewPager从右到左和从左到右滑动

时间:2017-09-09 19:03:00

标签: java android android-fragments

我在我的一个Android应用程序中使用ViewPager。我正在学习Android,因此不太了解它。我希望在基于位置的情况下从左到右和从右到左禁用滑动。我在stackoverflow中搜索了解决方案,但没有得到任何适当的解决方案。我在这里附上我的代码。如果有人可以帮助我解决这个难题,请告诉我。

我的ViewPager

adapter = new MyAdapter(getSupportFragmentManager());
    viewPager.setOffscreenPageLimit(0);
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }

        @Override
        public void onPageSelected(int position) {
            constant.new_ad_count = constant.new_ad_count + 1;
            mItemIndx = position;
            try {
                int index = position % ITEMS_PER_PAGE;
                currentQuote = quotes.get(index);
            } catch
                    (Exception e) {
            }
            mPageIndx = ((position + 1) / ITEMS_PER_PAGE) + (((position + 1) % ITEMS_PER_PAGE) > 0 ? 1 : 0);
            updateUI();
        }

        @Override
        public void onPageScrollStateChanged(int state) {
        }
    });
    viewPager.setAdapter(adapter);
    viewPager.setCurrentItem(mItemIndx);
    updateUI();
}

我想要的功能禁用滑动

private void updateUI() {

    lblLikeCount.setText(currentQuote.getQuLike());
    lblShareCount.setText(currentQuote.getQuShare());
    lblTime.setText(currentQuote.getQuTime());
    textPageCount.setText((mItemIndx + 1) + " / " + totalSize);
    // butNext.setVisibility((mItemIndx < totalSize - 1) ? View.VISIBLE : View.INVISIBLE);
    butPrev.setVisibility((mItemIndx > 0) ? View.VISIBLE : View.INVISIBLE);
    if(mItemIndx==totalSize-1||(mItemIndx+1)%ITEMS_PER_PAGE==0) {
        butNext.setVisibility(View.INVISIBLE);
        //I want Disable Right to Left Swipe Here
    } else {
        butNext.setVisibility(View.VISIBLE);
    }
    if (mItemIndx-1<0 ||(mItemIndx)%ITEMS_PER_PAGE==0) {
        butPrev.setVisibility(View.INVISIBLE);
        //I want Disable Left to Right Here
    } else {
        butPrev.setVisibility(View.VISIBLE);
    }

}

非常感谢朋友们:)

1 个答案:

答案 0 :(得分:0)

使用此NonSwipableViewPager课程,使用此课程,您只能在致电setCurrentItem时更改页面。

public class NonSwipeableViewPager extends ViewPager {

    public NonSwipeableViewPager(Context context) {
        super(context);
        setMyScroller();
    }

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

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

    //down one is added for smooth scrolling

    private void setMyScroller() {
        try {
            Class<?> viewpager = ViewPager.class;
            Field scroller = viewpager.getDeclaredField("mScroller");
            scroller.setAccessible(true);
            scroller.set(this, new MyScroller(getContext()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public class MyScroller extends Scroller {
        public MyScroller(Context context) {
            super(context, new DecelerateInterpolator());
        }

        @Override
        public void startScroll(int startX, int startY, int dx, int dy, int duration) {
            super.startScroll(startX, startY, dx, dy, 350 /*1 secs*/);
        }
    }

将此类添加到项目中,然后在所需的布局中,将ViewPager替换为:

<yourpackagename.NonSwipeableViewPager

然后在您的Activity或Fragment中初始化它:

NonSwipeableViewPager pager = (NonSwipeableViewPager) findViewById(R.id.pager);