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

Juh*_*ani 13 android android-viewpager

当您使用setPageMargin为ViewPager设置负边距时,页面将变得小于ViewPager的整个宽度.这样做的副作用是用户可以使用一个长手势来多次更改活动页面.

有没有办法阻止单个手势多次更改页面?

我试图阻止动作事件到达寻呼机,但你必须让MotionEvent.ACTION_UP通过或者寻呼机无法正常工作.up还会触发ViewPager中基于速度的计算,并在触发时导致额外的页面更改.

我需要重置拖动的速度,或者我需要以某种方式阻止其他页面更改.

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

有任何想法吗?

luc*_*ofm 1

我不知道你到底想在这里实现什么,但是使用PagerAdapter上的getPageWidth()来使页面宽度小于 ViewPager 宽度,而不是使用负边距不是更好吗?

编辑

好吧,我想出了一个“hacky”解决方案,包括将源代码从 ViewPager 复制到您的项目中并修改一点performDrag(),这样它就不会拖​​动超过一个页面。

这个 Hack 需要一些假设:

  1. 它使用getPageWidth()来确定页面的相对大小
  2. 所有页面必须返回相同的getPageWidth()

您可以检查示例项目,以及ViewPager修改差异

这不是一个漂亮或优雅的解决方案,但它有效,我最终将关闭 3 个月前的同样问题的票,所以经理很高兴:)