有没有办法自定义ViewPager滚动的阈值?

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

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

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

Solutions Collecting From Web of "有没有办法自定义ViewPager滚动的阈值?"

在这里出去走一走; 我毫不怀疑,你可能需要调整这个概念和/或代码。

我会推荐我在上面的评论中做了什么。 扩展ViewPager并覆盖它的公共构造函数,然后调用initViewPager()一个自定义方法(见你提供的源代码)。 但是,正如您所注意到的, mFlingDistancemMinimumVelocitymMaximumVelocityprivate字段,所以它们不能被子类访问。

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

这里有点棘手。 在Android中,我们可以使用Java Reflection 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 

然后,用任何你想要的值重复这两个variables。 你可能想看看这些是如何计算的来源。

不幸的是,尽pipe我想推荐使用Reflection来覆盖private方法determineTargetPage() ,但我不相信这是可能的 – 即使使用了扩展的Reflection API。