【问题标题】:Circular ViewPager implementation圆形 ViewPager 实现
【发布时间】:2014-04-08 13:55:59
【问题描述】:

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

ViewPager as a circular queue / wrapping

问题:如果少于 4 件就不行了。


Solution-2 添加 2 个额外项,即第一项中的最后一项和最后一项中的第一项和 onPageSelected,根据位置值设置当前项

Implementing Circular Scrolling In PagerAdapter

问题:额外的分页指示器和额外的片段实例。


Solution-3:在 ViewPager 上使用 onTouchListener

Implementing Circular Scrolling In PagerAdapter

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

有没有合适的解决方案?

或者即使 第三种解决方案 工作正常,它也很棒。

【问题讨论】:

  • 我也在尝试制作圆形查看器。我已经实施了。使用 2 解决方案。现在的问题是片段在第一轮滚动后不起作用。他们在第一轮工作得很好。但是在第一轮之后他们就不行了。按钮不起作用。你能看看我的问题stackoverflow.com/questions/34481219/…

标签: android android-viewpager


【解决方案1】:

我使用了解决方案 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

【讨论】:

  • @tyczi 如果您使用的是touchListener,为什么还需要2 个额外的项目?你能检查我的solution 并告诉我是否有任何缺陷。谢谢
  • 因为您可以平滑滚动到最后一页,然后在最后一页上是当您在滑动过程中切换到副本时。这种方式使它看起来更像一个自然的浏览器。如果您只是将最后一个索引上的页面更改为第一个索引,则看起来不那么流畅
  • 如何使用动态大小的 ViewPager 进行这项工作?
猜你喜欢
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
相关资源
最近更新 更多