在ViewPager滑动到最后一页后提示

3
我创建了一个带圆形页面指示器的视图分页器,它运行良好。现在我有一个新的需求:当我在最后/第一页并尝试向下/向上滑动到下一页/上一页时,我的屏幕应该朝着滑动方向移动至少30%,然后回到原来的位置,因为没有更多的页面可以导航。当然,我在顶部有页面指示器,告诉我可用页面的位置。我希望我的需求清楚明确。我该如何实现它?请帮帮我。提前感谢您。
2个回答

6
ViewPager.OnPageChangeListener pagerListener = new ViewPager.OnPageChangeListener() {
        boolean lastPageChange = false;

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels){
            int lastIdx = mPgScreenAdapter.getCount() - 1;

            Log.d(TAG, "pos:" + position);
            if(lastPageChange && position == lastIdx)
                PPIntent.changeScene(curAct, new Intent(curAct, LoginActivity.class), true);
        }
        @Override
        public void onPageSelected( int i) {
            pgText.setCurrentItem(i/2);
        }
        @Override
        public void onPageScrollStateChanged(int state) {
            int lastIdx = mPgScreenAdapter.getCount() - 1;

            int curItem = pgScreen.getCurrentItem();
            if(curItem==lastIdx /*&& lastPos==lastIdx*/  && state==1)   lastPageChange = true;
            else                                                         lastPageChange = false;
        }
    };

1
这个很好用,只是启动新活动的代码可以移动到pagescrollstatechanged中的if条件内,因为onPageScrolled会被多次调用。 - Rat-a-tat-a-tat Ratatouille
请问如何在用户向后滑动ViewPager的第一页时,向用户发出"this is first page"的提示?谢谢@icarus2n - Rishikesh pathak

2

这是自动的。操作系统内置了指示器,告诉用户视图无法进一步滑动。操作系统会在屏幕侧面显示发光点,用户无法再拉动。

不确定是否可以创建自己独特的UI来处理此问题 - 操作系统提供了一个开箱即用的指示器。


除非我不小心关闭了它,否则我已经使用ViewPager几个月了,它从来没有自动执行过overswipe效果。但是对于GridView、TextView和ListView,它确实会执行该效果。 - DeeV
这取决于操作系统,我用2.3和4.1设备进行了检查,实现方式是不同的。在2.3中根本没有任何指示,在4.1中有发光的副作用,我相信你将不得不自己实现这个功能。 - Tomer Mor
顺便说一下 - 这被称为“Overscroll”。 - Booger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接