Android SimpleOnPageChangeListener - 确定滑动方向

7

我有一个继承SimpleOnPageChangeListener的类,在我的onPageScrollStateChanged方法中,我想能够确定用户是向前还是向后通过ViewPager进行了滑动。也就是说,他们是从左向右滑动还是从右向左滑动。

我已经在Google上搜索了很多关于这个问题的信息,但是我找不到任何相关的内容。我本来以为onPageScrollStateChanged方法会提供一个参数来说明滑动的方向,但实际上没有。

    @Override
    public void onPageScrollStateChanged(int state) {

        // Determine whether the user is swiping forwards or backwards through the ViewPager
    }

有人有什么想法吗?

谢谢 Mike

2个回答

3
使用ViewPager.SimpleOnPageChangeListener并保留当前标签位置的实例变量,这样你就可以确定它是向哪个方向滑动了。
private final ViewPager.SimpleOnPageChangeListener mPageChangeListener = new ViewPager.SimpleOnPageChangeListener() {

        @Override
        public void onPageSelected(final int position) {
            onTabChanged(mPager.getAdapter(), mCurrentTabPosition, position);
            mCurrentTabPosition = position;
        }
    };

 protected void onTabChanged(final PagerAdapter adapter, final int oldPosition, final int newPosition) {
        //Calc if swipe was left to right, or right to left
         if (oldPosition>newPosition){
           // left to right
         }
         else{
           //right to left 
         }

    }

嗨Scottyab,谢谢你的快速回复。我已经实施了这个解决方案,但它只在页面已经改变后才触发。我想要执行一些验证来阻止用户向前移动,但允许他们向后移动。使用这个解决方案,页面已经改变了。 - mighele

0
        int prevPage;

        @Override
        public void onPageSelected(int position) {
            // went back a page
            if (position-1 == prevPage) {
                Log.i("Swipped", "Swipped Left");
            }
            // went up a page
            if (position+1 == prevPage) {
                Log.i("Swipped", "Swipped Right");
            }
            prevPage = position;


        }

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