我无法找到更改ViewPager中滚动页面的触摸阈值的方法: http://developer.android.com/reference/android/support/v4/view/ViewPager.html
查看source code,ViewPager有一个名为determineTargetPage的方法,用于检查移动触摸手势距离>阈值范围,但看起来无法修改此范围。
有关如何控制此阈值的任何建议(如果可能的话)?
答案 0 :(得分:11)
在这里走出一点点;我毫不怀疑你可能需要调整这个概念和/或代码。
我会推荐我在上面的评论中所做的事情;扩展ViewPager
并覆盖其公共构造函数,并调用自定义方法,该方法是initViewPager()
的克隆(在您提供的源中看到)。但是,正如您所指出的,mFlingDistance
,mMinimumVelocity
和mMaximumVelocity
是private
字段,因此子类无法访问它们。
(注意:如果您愿意,也可以在调用构造函数后更改这些方法。
这里有点棘手。在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>