我找不到一种改变ViewPager中滚动页面触摸阈值的方法: http://developer.android.com/reference/android/support/v4/view/ViewPager.html
查看源代码,ViewPager有一个名为determineTargetPage的方法,检查移动触摸手势距离是否大于阈值范围,但似乎没有办法修改此范围。
如果可能的话,您有什么建议可以控制此阈值吗?
如果可能的话,您有什么建议可以控制此阈值吗?
在这里稍微冒险一下,我毫不怀疑您可能需要调整此概念和/或代码。
我建议您按上面的评论进行扩展 ViewPager
并覆盖其公共构造函数,并调用一个自定义方法,该方法是initViewPager()
的克隆(在您提供的源中看到)。但是,正如您指出的那样,mFlingDistance
,mMinimumVelocity
和mMaximumVelocity
是私有字段,因此无法通过子类访问它们。
(注意:如果需要,您还可以在调用构造函数后更改这些方法。)
这里有点棘手。在Android中,我们可以使用Java反射API来使这些字段可访问。
应该像这样工作:
Class clss = getClass.getSuperClass();
Field flingField = clss.getDeclaredField("mFlingDistance"); // Of course create other variables for the other two fields
flingField.setAccessible(true);
flingField.setInt(this, <whatever int value you want>); // "this" must be the reference to the subclass object
然后,使用您想要的任何值重复此过程,以另外两个变量为例。您可能需要查看源代码中这些变量是如何计算的。determineTargetPage()
,但我认为即使使用广泛的反射 API,也无法实现这一点。
ViewPager
并覆盖那个方法吗? - CatinitViewPager
方法,并让您的自定义构造函数调用该方法。您可以在那里设置 fling 距离和速度。 - CatdetermineTargetPage
的决定因素,决定是否切换页面。 - Cat