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

时间:2012-07-31 01:21:17

标签: android

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

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

有关如何控制此阈值的任何建议(如果可能的话)?

1 个答案:

答案 0 :(得分:11)

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

我会推荐我在上面的评论中所做的事情;扩展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

然后,使用您想要的任何值为其他两个变量重复此操作。您可能想看一下如何在源中计算这些内容。

不幸的是,尽管我建议使用Reflection来覆盖private方法determineTargetPage(),但我认为不可能这样做 - 即使使用扩展的Reflection API。< / p>