代码之家  ›  专栏  ›  技术社区  ›  Priya

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

  •  0
  • Priya  · 技术社区  · 7 年前

    我正在我的一个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 回复  |  直到 7 年前
        1
  •  0
  •   MichaelStoddart    7 年前

    使用this 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
    

    然后在活动或片段中初始化它:

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