android - 如何获得用户试图在 ViewPager 中过度滚动的指示

标签 android android-fragments android-viewpager

一旦用户在最后一个 fragment 上尝试滚动(当弹跳效果发生时),我想开始一个新 Activity 。我正在使用 ViewPagerIndicator

一旦最后一个 fragment 可见,下面的代码就会启动 Activity 。

有什么想法吗?

 CirclePageIndicator titleIndicator = (CirclePageIndicator)findViewById(R.id.titles);
    titleIndicator.setViewPager(pager);
    titleIndicator.(new );
    titleIndicator.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
                selectedIndex = position;

        }

        @Override
        public void onPageScrolled(int position, float arg1, int arg2) {


        }

        @Override
        public void onPageScrollStateChanged(int scroll) {
            if(selectedIndex == adapter.getCount()-1)
            {
               launchactivity)(;
            }


        }


    });

最佳答案

我们只对过度滚动的情况感兴趣,即 0 和 mPager.getAdapter().getCount() - 1 当滚动条的状态为 ViewPager.SCROLL_STATE_DRAGGING 表示用户的手指仍在屏幕上并拖动 View 。下面的条件需要连续0个positionOffset来判断是否进入overscroll模式。

 titleIndicator.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                private int mScrollState = -1;
                private float mPreviousPageOffset;

                @Override
                public void onPageScrollStateChanged(int state) {
                    super.onPageScrollStateChanged(state);
                    mScrollState = state;
                    if(mScrollState == ViewPager.SCROLL_STATE_IDLE) mPreviousPageOffset = -1;
                }

                @Override
                public void onPageScrolled(int position, float positionOffset,
                        int positionOffsetPixels) {
                    super.onPageScrolled(position, positionOffset, positionOffsetPixels);
                    boolean isLastPosition = position == mPager.getAdapter().getCount() - 1;
                    if(isLastPosition && mScrollState == ViewPager.SCROLL_STATE_DRAGGING && mPreviousPageOffset == 0f && positionOffset == 0f){
                          //launchActivity
                    }
                    mPreviousPageOffset = positionOffset;
                }
            });

如果用户松开手指,positionOffset 仍将变为 0,但滚动条状态将为 ViewPager.SCROLL_STATE_SETTLING 或者 positionOffset 将变为 0 只有一次。

关于android - 如何获得用户试图在 ViewPager 中过度滚动的指示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27299002/

相关文章:

android - 在滑动时从 fragment 导航到 Activity

android - 在恢复 Activity 时刷新 FragmentStatePagerAdapter 上的图像

android twitter 应用程序,自定义 viewpager 选项卡如何

android - 有什么方法可以强制在 Android 上显示选项菜单

Android Studio 找不到文件

android - 如何将数据从android应用程序发送到asp.net webservices

Android fragment OnCreateView 调用了两次

android - 修复我的 Firebase 数据库聊天应用程序

android - 在 fragment 的后按防止使用导航图调用前一个 fragment 的 onViewCreated

android - 在 ViewPager 中设置操作栏标题