在最后一个屏幕上滑动时的Android ViewPager

Sik*_*ior 11 android android-viewpager

我无法弄清楚如何在视图寻呼机的最后一页上捕获滑动事件.

基本上要求是当用户在最后一页上,并且他们尝试滑动以进入下一页时,活动应该关闭.

我已经尝试过onPageScrolled,但我似乎无法在那里区分左或右滑动.在最后一页上,用户仍应保留移动到上一页的功能.

所以基本上就是这样

When on last page
    if swipe prev (do normal behaviour)
    if swipe next (finish activity)
Run Code Online (Sandbox Code Playgroud)

有人可以提供任何建议吗?谢谢

Kis*_*ava 14

这是工作解决方案!!

必需的变量

....
private boolean isLastPageSwiped;
private int counterPageScroll;
....
Run Code Online (Sandbox Code Playgroud)

在ViewPager的onPageScrolled里面

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    //Here 6 is last position 
    if (position == 6 && positionOffset == 0 && !isLastPageSwiped){
        if(counterPageScroll != 0){
            isLastPageSwiped=true;
            //Next Activity here
        }
        counterPageScroll++;
    }else{
        counterPageScroll=0;
    }
}
Run Code Online (Sandbox Code Playgroud)


tas*_*iac 11

你应该ViewPager在你的实际最后一页上刷一个虚假的空白页面,这是假的.当这个假的可见时完成了Activity.

你应该尝试这种方式,如果它不起作用,我可以给你一个示例代码.

  • 如果您使用任何类型的寻呼机指示器,它会显示为额外项目.此外,如果您在视图寻呼机中覆盖onDraw以显示视差图像,它将甩掉图像滚动的百分比. (5认同)

Rat*_*lle 9

我可能真的很晚了,但这可能会帮助其他人下线.我从stackoverflow上的一个问题得到了片段,其中我只是稍微调整一下代码.

从这里回答.

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) {}

    }
    @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  && state==1){
            lastPageChange = true;

            // i put this here since onPageScroll gets called a couple of times.
            finish();
        }else  { 
            lastPageChange = false;
        }
    }
};
Run Code Online (Sandbox Code Playgroud)


Muh*_*raf 5

int lastPosition;
int currentPosition;


//View pager assign 
ViewPager viewPager = findViewById(R.id.viewPager);
//PageIndicatorView external https://github.com/romandanylyk
PageIndicatorView pageIndicatorView = findViewById(R.id.pageIndicatorView);


//customise pageIndicatorView design
pageIndicatorView.setAnimationType(AnimationType.THIN_WORM);
pageIndicatorView.setViewPager(viewPager);


//BannerAdapter is an custom adapter for viewpage i made.
//assign data here
BannerAdapter pagerAdapter = new BannerAdapter(this, banner, new OnClickListener() {
            @Override
            public void onClick() {

            }
        });
viewPager.setAdapter(pagerAdapter);

//listener for View Pager
//this is where process of making the infinite loop
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            //assign position so that can be manipulated
            currentPosition = position;
        }
        @Override
        public void onPageSelected(int position) {
            //set pager indicator position here 
            pageIndicatorView.setSelection(position);
        }
        @Override
        public void onPageScrollStateChanged(int state) {
            //check state 0 mean no ongoing process
            if(state == 0){
                //check currentPosition == lastPosition to detect that scroll cant scroll anymore
                if(currentPosition == lastPosition){
                    int lastitem = banner.size() - 1;
                    //check position if either last item/first item
                    //and set viewpager current page as follow
                    if(currentPosition == lastitem){
                        viewPager.setCurrentItem(0);
                    }else if(currentPosition == 0){
                        viewPager.setCurrentItem(lastitem);
                    }
                }else{
                    lastPosition = currentPosition;
                }
                Log.d("ScrollState", "currentPosition: " + currentPosition);
            }
            /*empty*/
        }
    });
Run Code Online (Sandbox Code Playgroud)