如何将ViewPager页面更改限制为每个手势一次。

12

使用setPageMargin在ViewPager中设置负边距时,页面将变得比ViewPager的全宽度小。这样的副作用是用户可以使用一次长手势更改活动页面多次。

有没有方法防止单个手势多次更改页面?

我尝试阻止MotionEvent事件到达pager,但必须允许MotionEvent.ACTION_UP通过,否则pager无法正常工作。此外,up触发ViewPager中基于速度的计算,并在触发时导致额外的页面更改。

要么我需要重置拖动的速度,要么我需要以某种方式防止附加页面更改。

我使用了这个问题答案中描述的方法来停止滚动,但所描述的ACTION_UP问题阻止了我完成它。是否可以禁用ViewPager上的滚动

有什么想法吗?

1个回答

1
我不确定你在这里想要实现什么,但是与其使用负边距,不如在PagerAdapter上使用getPageWidth()使页面宽度小于ViewPager宽度更好。

编辑

好的,我想出了一个“hacky”的解决方案,即将ViewPager的源代码复制到您的项目中,并稍微修改performDrag()函数,使其不会拖动超过一页。

这个Hack有一些假设:

  1. 它使用getPageWidth()来确定页面的相对大小
  2. 所有页面必须返回相同的getPageWidth()
你可以查看示例项目ViewPager修改差异
这不是一个美丽或优雅的解决方案,但它能起作用,我将终于关闭一个持续3个月的具有相同问题的工单,所以经理很高兴 :)。

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