循环ViewPager实现

时间:2014-04-08 13:56:00

标签: android android-viewpager

  

解决方案-1:通过指定一个非常大的数字作为实际计数,但将它们映射到数据集/页面集的实际范围

     

ViewPager as a circular queue / wrapping

     

问题:如果项目少于4件,则无效。


  

解决方案-2 添加2个额外项目,即最后一项和最后一项中的最后一项和onPageSelected,具体取决于位置值,设置当前项目

     

Implementing Circular Scrolling In PagerAdapter

     

问题:额外的寻呼机指标和额外的片段实例。


  

解决方案-3:在ViewPager上使用onTouchListener

     

Implementing Circular Scrolling In PagerAdapter

     

问题:第一个MotionEvent始终为null。是因为ViewPager自己的onTouchListener实现吗?

对此有适当的解决方案吗?

即使第3个解决方案工作正常,也会很棒。

1 个答案:

答案 0 :(得分:0)

我使用解决方案2和解决方案3的组合,我使用寻呼机的触摸监听器来监视滑动并查看是否需要根据当前页面显示第一页或最后一页的副本

示例:

mPager.setOnTouchListener(new OnTouchListener(){

            @Override
            public boolean onTouch(View v, MotionEvent event) {


                if(event.getAction() == MotionEvent.ACTION_DOWN){
                    dxInitial=event.getX();
//                  
                }else if(event.getAction() == MotionEvent.ACTION_MOVE){
//                  
                    if(event.getX() - dxInitial > 50 && currentPage==1){

                    }else if(dxInitial - event.getX() > 50 && currentPage==5){
                        mPager.setCurrentItem(0,false);
                    }else if(dxInitial - event.getX() > 50 && currentPage==6){
                        mPager.setCurrentItem(1,false);
                    }else if(event.getX() - dxInitial > 50 && currentPage==0){
                        mPager.setCurrentItem(5,false);
                    }else if(event.getX() - dxInitial > 100 && currentPage==6){
//                      
                        mPager.setCurrentItem(1,false);
                    }
                }

                return false;
            }
        }); 

你有额外的寻呼机指示器,但用户不应该看到或注意到它们,只需在更改页面时将smoothScroll设置为false