Android 如何修改viewpager的灵敏度?
有人知道如何修改ViewPager的灵敏度吗 目前,我使用android v4支持库中的ViewPager来实现自己的照片查看器 然而,当我的手指触到屏幕并移动很短的距离(可能只有0.5厘米)时,默认的ViewPager太敏感了。然后将切换ViewPager以滚动到下一个/上一个照片视图 有没有办法覆盖ViewPager的默认行为以降低灵敏度Android 如何修改viewpager的灵敏度?,android,Android,有人知道如何修改ViewPager的灵敏度吗 目前,我使用android v4支持库中的ViewPager来实现自己的照片查看器 然而,当我的手指触到屏幕并移动很短的距离(可能只有0.5厘米)时,默认的ViewPager太敏感了。然后将切换ViewPager以滚动到下一个/上一个照片视图 有没有办法覆盖ViewPager的默认行为以降低灵敏度 感谢您的回复。我已经从兼容库的src中签出了ViewPager.java,似乎没有办法通过xml或某些setter来实现。ViewPager的代码如下所示
感谢您的回复。我已经从兼容库的src中签出了ViewPager.java,似乎没有办法通过xml或某些setter来实现。ViewPager的代码如下所示:
final float density = context.getResources().getDisplayMetrics().density;
mFlingDistance = (int) (MIN_DISTANCE_FOR_FLING * density);
mCloseEnough = (int) (CLOSE_ENOUGH * density);
mDefaultGutterSize = (int) (DEFAULT_GUTTER_SIZE * density);
如你所见,它使用它的内部常数来确定投掷距离等等
好消息是:您可以将ViewPager(此处应考虑它的许可证)复制到您的代码中,并对其进行扩展,例如从xml属性获取fling distance。您可以这样反映mFlingDistance字段:
Field mFlingDistance;
mFlingDistance = ViewPager.class.getDeclaredField("mFlingDistance");
mFlingDistance.setAccessible(true);
// Set custom value:
mFlingDistance.set(mPager, 30);
虽然佩斯·乔纳坦有一个很好的指针来达到更好的灵敏度,但除了投掷距离之外,你可能还想降低最小速度 您可能希望在onCreate中初始化viewpager后执行此操作:
viewPager = findViewById(R.id.viewPager);
Field mFlingDistance;
Field mMinimumVelocity;
try {
mFlingDistance=ViewPager.class.getDeclaredField("mFlingDistance");
mMinimumVelocity=ViewPager.class.getDeclaredField("mMinimumVelocity");
mFlingDistance.setAccessible(true);
mMinimumVelocity.setAccessible(true);
//customize the values
mFlingDistance.set(viewPager, 10);
mMinimumVelocity.set(viewPager, 400);
} catch (Exception e) {
e.printStackTrace();
}
对于
ViewPager2
使用反射提取并增加mTouchSlop
private fun ViewPager2.reduceDragSensitivity(){
val recyclerViewField=ViewPager2::class.java.getDeclaredField(“mRecyclerView”)
recyclerViewField.isAccessible=true
val recyclerView=recyclerViewField.get(this)as recyclerView
val touchlopfield=RecyclerView::class.java.getDeclaredField(“mTouchSlop”)
touchlopfield.isAccessible=true
val touchlop=touchlopfield.get(recyclerView)为Int
通过实验获得了touchlopfield.set(recyclerView,touchlop*8)/“8”
}
从视图寻呼机调用此函数
val viewPager:ViewPager2=view.findViewById(R.id.pager)
viewPager.reduceDragSensitivity()
Java版本
private void reduceDragSensitivity(){
试一试{
Field ff=ViewPager2.class.getDeclaredField(“mRecyclerView”);
ff.setAccessible(真);
RecyclerView RecyclerView=(RecyclerView)ff.get(viewPager);
Field touchSlopField=RecyclerView.class.getDeclaredField(“mTouchSlop”);
touchlopfield.setAccessible(true);
inttouchlop=(int)touchlopfield.get(recyclerView);
touchlopfield.set(循环视图,touchlop*4);
}捕获(无此字段例外){
e、 printStackTrace();
}捕获(非法访问例外e){
e、 printStackTrace();
}
}
所有的积分都是和。这很有意思,但你也可以使用反射来设置。@Raymond,你找到解决方法了吗?我需要像默认滚动视图一样滚动查看页面。