在Viewpager上向左滑动到最后一个

时间:2018-02-21 16:07:41

标签: android android-viewpager

我有一个带有卡片的viewpager,需要向右滑动,直到到达最后一个项目,然后向左滑动直到到达第一个项目。我不知道如何解决这个问题。

SlidesPagerAdapter slidesPagerAdapter = new SlidesPagerAdapter(getFragmentManager());
        viewPager.setAdapter(slidesPagerAdapter);
        viewPager.setOffscreenPageLimit(3); // To see two cards the sides
        viewPager.setClipToPadding(false);
        viewPager.setPadding(32,0,32,0);
        viewPager.setPageMargin(-16);


        // Attach the page change listener inside the activity
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {

            }

            // This method will be invoked when the current page is scrolled
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                if (position > SlidesPagerAdapter.NUMBER_SLIDES-1) {
                    viewPager.setCurrentItem(0, true);
                }
            }

            // Called when the scroll state changes:
            // SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
            @Override
            public void onPageScrollStateChanged(int state) {
                int currentPage = viewPager.getCurrentItem();       //ViewPager Type

                if (currentPage == SlidesPagerAdapter.NUMBER_SLIDES || currentPage == 0){
                    previousState = currentState;
                    currentState = state;
                    if (previousState == 1 && currentState == 0){

                        viewPager.setCurrentItem(currentPage == 0 ? SlidesPagerAdapter.NUMBER_SLIDES : 0);

                    }
                }
            }
        });

当我到达最后一个项目时,行为很好。但当我回到第一个元素并尝试再次滑动时,viewpager会向我显示最后一个元素。

1→ 2 - > 3 - > 4 =>好 4 - > 3 - > 2 - > 1 - > 4 !!!!

1 个答案:

答案 0 :(得分:0)

解决方案:

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {


            }

            // This method will be invoked when the current page is scrolled
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            // Called when the scroll state changes:
            // SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
            @Override
            public void onPageScrollStateChanged(int state) {
                int currentPage = viewPager.getCurrentItem();       //ViewPager Type

                if (currentPage == SlidesPagerAdapter.NUMBER_SLIDES-1 || currentPage == 0){
                    previousState = currentState;
                    currentState = state;
                    if (previousState == 1 && currentState == 0){

                        viewPager.setCurrentItem(currentPage == 0 ? 0 : SlidesPagerAdapter.NUMBER_SLIDES-1);

                    }
                }
            }
        });