gpt4 book ai didi

android - 如何修改viewpager的灵敏度

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:52:36 25 4
gpt4 key购买 nike

有谁知道怎么修改ViewPager的灵敏度吗?

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

但是,默认的 ViewPager 过于敏感,当我的手指在屏幕上触碰并移动一个非常短的距离(可能只有 0.5 厘米)时。然后将切换 ViewPager 以滚动到下一个/上一个照片 View 。

有什么方法可以覆盖 ViewPager 的默认行为以降低敏感度吗?

感谢任何回复。

最佳答案

对于 ViewPager2 使用反射提取和增加 mTouchSlop

    private fun ViewPager2.reduceDragSensitivity() {
val recyclerViewField = ViewPager2::class.java.getDeclaredField("mRecyclerView")
recyclerViewField.isAccessible = true
val recyclerView = recyclerViewField.get(this) as RecyclerView

val touchSlopField = RecyclerView::class.java.getDeclaredField("mTouchSlop")
touchSlopField.isAccessible = true
val touchSlop = touchSlopField.get(recyclerView) as Int
touchSlopField.set(recyclerView, touchSlop*8) // "8" was obtained experimentally
}

从您的 View 寻呼机调用此函数

val viewPager: ViewPager2 = view.findViewById(R.id.pager)
viewPager.reduceDragSensitivity()

Java 版本

private void reduceDragSensitivity() {
try {
Field ff = ViewPager2.class.getDeclaredField("mRecyclerView") ;
ff.setAccessible(true);
RecyclerView recyclerView = (RecyclerView) ff.get(viewPager);
Field touchSlopField = RecyclerView.class.getDeclaredField("mTouchSlop") ;
touchSlopField.setAccessible(true);
int touchSlop = (int) touchSlopField.get(recyclerView);
touchSlopField.set(recyclerView,touchSlop*4);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}

所有学分Alexander ShevelevMahmoud Shabat .

关于android - 如何修改viewpager的灵敏度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12135615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com