Set swipe scale factor to 2 (#3249)
Verified by enabling "Pointer Location" in the developer options, and then experimenting to see which angles trigger opens of the nav. drawer, and in a stock "Tabbed Activity" generated in Android Studio (New > Activity > Tabbed Activity) that uses ViewPager2.
This commit is contained in:
parent
6249dba467
commit
fac62a638e
|
@ -77,7 +77,7 @@ fun ViewPager2.reduceSwipeSensitivity() {
|
||||||
// to scroll vertically -- it's far too easy to trigger an accidental horizontal swipe.
|
// to scroll vertically -- it's far too easy to trigger an accidental horizontal swipe.
|
||||||
//
|
//
|
||||||
// One way to stop this is to reach in to ViewPager2's RecyclerView and adjust the amount
|
// One way to stop this is to reach in to ViewPager2's RecyclerView and adjust the amount
|
||||||
// of touch slop it has. Scaling by 2 appears to work well.
|
// of touch slop it has.
|
||||||
//
|
//
|
||||||
// See https://issuetracker.google.com/issues/139867645 and
|
// See https://issuetracker.google.com/issues/139867645 and
|
||||||
// https://bladecoder.medium.com/fixing-recyclerview-nested-scrolling-in-opposite-direction-f587be5c1a04
|
// https://bladecoder.medium.com/fixing-recyclerview-nested-scrolling-in-opposite-direction-f587be5c1a04
|
||||||
|
@ -91,10 +91,10 @@ fun ViewPager2.reduceSwipeSensitivity() {
|
||||||
val touchSlopField = RecyclerView::class.java.getDeclaredField("mTouchSlop")
|
val touchSlopField = RecyclerView::class.java.getDeclaredField("mTouchSlop")
|
||||||
touchSlopField.isAccessible = true
|
touchSlopField.isAccessible = true
|
||||||
val touchSlop = touchSlopField.get(recyclerView) as Int
|
val touchSlop = touchSlopField.get(recyclerView) as Int
|
||||||
// 4 seems to be a sweet-spot. 2-3 still causes a horizontal swipe right if the user drags
|
// Experimentally, 2 seems to be a sweet-spot, requiring a downward swipe that's at least
|
||||||
// down-left at ~ 45 degree angle. Experimentally, 4 requires the swipe to be +/- ~ 10 degrees
|
// 45 degrees off the vertical to trigger a change. This is consistent with maximum angle
|
||||||
// from horizontal to register as a horizontal and not a vertical swipe.
|
// supported to open the nav. drawer.
|
||||||
val scaleFactor = 4
|
val scaleFactor = 2
|
||||||
touchSlopField.set(recyclerView, touchSlop * scaleFactor)
|
touchSlopField.set(recyclerView, touchSlop * scaleFactor)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.w("reduceSwipeSensitivity", e)
|
Log.w("reduceSwipeSensitivity", e)
|
||||||
|
|
Loading…
Reference in New Issue