Improve fast scrolling

This commit is contained in:
kitsunyan
2020-06-21 18:11:56 +03:00
parent 1103e6c75c
commit 540b97ae6e
2 changed files with 4 additions and 2 deletions
@@ -79,6 +79,7 @@ class ProductsFragment(): Fragment(), CursorOwner.Callback {
isMotionEventSplittingEnabled = false
isVerticalScrollBarEnabled = false
setHasFixedSize(true)
recycledViewPool.setMaxRecycledViews(ProductsAdapter.ViewType.PRODUCT.ordinal, 30)
adapter = ProductsAdapter { screenActivity.navigateProduct(it.packageName) }
addItemDecoration(DividerItemDecoration(context,
DividerItemDecoration.fixed(context.resources.sizeScaled(72), 0)))
@@ -23,6 +23,7 @@ class RecyclerFastScroller(private val recyclerView: RecyclerView) {
private val thumbDrawable = recyclerView.context.getDrawableFromAttr(android.R.attr.fastScrollThumbDrawable)
private val trackDrawable = recyclerView.context.getDrawableFromAttr(android.R.attr.fastScrollTrackDrawable)
private val minTrackSize = recyclerView.resources.sizeScaled(32)
private data class FastScrolling(val startAtThumbOffset: Float?, val startY: Float, val currentY: Float)
@@ -129,8 +130,8 @@ class RecyclerFastScroller(private val recyclerView: RecyclerView) {
}
event.action == MotionEvent.ACTION_DOWN -> {
val rtl = recyclerView.layoutDirection == RecyclerView.LAYOUT_DIRECTION_RTL
val maxWidth = max(thumbDrawable.intrinsicWidth, trackDrawable.intrinsicWidth)
val atThumbVertical = if (rtl) event.x <= maxWidth else event.x >= recyclerView.width - maxWidth
val trackWidth = max(minTrackSize, max(thumbDrawable.intrinsicWidth, trackDrawable.intrinsicWidth))
val atThumbVertical = if (rtl) event.x <= trackWidth else event.x >= recyclerView.width - trackWidth
atThumbVertical && run {
withScroll { itemHeight, thumbHeight, range ->
val offset = currentOffset(itemHeight, range)