简体   繁体   English

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

[英]Disable ViewPager Swipe From Right To Left and Left To Right Side

I am using ViewPager in one of my android application. 我在我的一个Android应用程序中使用ViewPager。 I am learning yet Android and so does not know much about it. 我正在学习Android,因此对此了解不多。 I want disable swipe from left to right and right to left on position based. 我想基于位置禁用从左向右和从右向左滑动。 I have searched in stackoverflow for solution but not got any proper solution. 我在stackoverflow中搜索了解决方案,但没有任何合适的解决方案。 I am attaching my code here. 我在这里附上我的代码。 Let me know if someone can help me to solve this puzzle. 让我知道是否有人可以帮助我解决这个难题。

My ViewPager 我的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();
}

Function From Which I want Disable Swipe 我要禁用的功能

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

}

Thanks a lot Friends :) 非常感谢朋友:)

Use a this NonSwipableViewPager class, using this, you will only be able to change the page when calling setCurrentItem . 使用此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*/);
        }
    }

Add this class to your project, then in the layout where you want it, replace ViewPager with: 将该类添加到您的项目中,然后在所需的布局中,将ViewPager替换为:

<yourpackagename.NonSwipeableViewPager

Then initialise it in your Activity or Fragment: 然后在“活动”或“片段”中将其初始化:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM