Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何修改viewpager的灵敏度?_Android - Fatal编程技术网

Android 如何修改viewpager的灵敏度?

Android 如何修改viewpager的灵敏度?,android,Android,有人知道如何修改ViewPager的灵敏度吗 目前,我使用android v4支持库中的ViewPager来实现自己的照片查看器 然而,当我的手指触到屏幕并移动很短的距离(可能只有0.5厘米)时,默认的ViewPager太敏感了。然后将切换ViewPager以滚动到下一个/上一个照片视图 有没有办法覆盖ViewPager的默认行为以降低灵敏度 感谢您的回复。我已经从兼容库的src中签出了ViewPager.java,似乎没有办法通过xml或某些setter来实现。ViewPager的代码如下所示

有人知道如何修改ViewPager的灵敏度吗

目前,我使用android v4支持库中的ViewPager来实现自己的照片查看器

然而,当我的手指触到屏幕并移动很短的距离(可能只有0.5厘米)时,默认的ViewPager太敏感了。然后将切换ViewPager以滚动到下一个/上一个照片视图

有没有办法覆盖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,你找到解决方法了吗?我需要像默认滚动视图一样滚动查看页面。