我无法找到一种方法来更改 ViewPager 中滚动页面的触摸阈值:http: //developer.android.com/reference/android/support/v4/view/ViewPager.html
查看源代码,ViewPager 有一个名为 determineTargetPage 的方法,用于检查移动触摸手势距离是否 > 阈值范围,但看起来无法修改此范围。
关于如何控制这个阈值的任何建议(如果可能的话)?
我无法找到一种方法来更改 ViewPager 中滚动页面的触摸阈值:http: //developer.android.com/reference/android/support/v4/view/ViewPager.html
查看源代码,ViewPager 有一个名为 determineTargetPage 的方法,用于检查移动触摸手势距离是否 > 阈值范围,但看起来无法修改此范围。
关于如何控制这个阈值的任何建议(如果可能的话)?
在这里有点四肢走动;我毫不怀疑您可能需要调整这个概念和/或代码。
我会推荐我在上面的评论中所做的;扩展ViewPager
和覆盖其公共构造函数,并调用一个自定义方法,该方法是initViewPager()
(在您提供的源代码中看到的)的克隆。但是,正如您所指出的,mFlingDistance
、mMinimumVelocity
和mMaximumVelocity
是private
字段,因此子类无法访问它们。
(注意:如果您愿意,也可以在调用构造函数后更改这些方法。)
这是有点棘手的地方。在 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
然后,使用您想要的任何值对其他两个变量重复此操作。您可能想看看这些是如何在源中计算的。
不幸的是,尽管我很想推荐使用 Reflection 来覆盖private
method determineTargetPage()
,但我不相信有可能做到这一点——即使使用扩展的 Reflection API。