9

我无法找到一种方法来更改 ViewPager 中滚动页面的触摸阈值:http: //developer.android.com/reference/android/support/v4/view/ViewPager.html

查看源代码,ViewPager 有一个名为 determineTargetPage 的方法,用于检查移动触摸手势距离是否 > 阈值范围,但看起来无法修改此范围。

关于如何控制这个阈值的任何建议(如果可能的话)?

4

1 回答 1

11

在这里有点四肢走动;我毫不怀疑您可能需要调整这个概念和/或代码。

我会推荐我在上面的评论中所做的;扩展ViewPager和覆盖其公共构造函数,并调用一个自定义方法,该方法是initViewPager()(在您提供的源代码中看到的)的克隆。但是,正如您所指出的,mFlingDistancemMinimumVelocitymMaximumVelocityprivate字段,因此子类无法访问它们。

(注意:如果您愿意,也可以在调用构造函数后更改这些方法。)

这是有点棘手的地方。在 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 来覆盖privatemethod determineTargetPage(),但我不相信有可能做到这一点——即使使用扩展的 Reflection API。

于 2012-07-31T06:37:19.783 回答