add a callback for updating the fastscroller bubble text

This commit is contained in:
tibbi 2017-12-05 23:18:32 +01:00
parent d67992880b
commit dabb5ef766
2 changed files with 10 additions and 7 deletions

View file

@ -7,7 +7,7 @@ buildscript {
propMinSdkVersion = 16
propTargetSdkVersion = propCompileSdkVersion
propVersionCode = 1
propVersionName = '3.1.2'
propVersionName = '3.1.3'
kotlin_version = '1.2.0'
support_libs = '27.0.2'
}

View file

@ -17,13 +17,14 @@ import com.simplemobiletools.commons.extensions.baseConfig
// based on https://blog.stylingandroid.com/recyclerview-fastscroll-part-1
class FastScroller : FrameLayout {
var isHorizontal = false
var allowBubbleDisplay = false
private var handle: View? = null
private var bubble: TextView? = null
private var currHeight = 0
private var currWidth = 0
private var bubbleOffset = 0
private var allowBubbleDisplay = false
private var fastScrollCallback: ((Int) -> Unit)? = null
private val HANDLE_HIDE_DELAY = 1000L
private var recyclerView: RecyclerView? = null
@ -35,7 +36,7 @@ class FastScroller : FrameLayout {
constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle)
fun setViews(recyclerView: RecyclerView, swipeRefreshLayout: SwipeRefreshLayout? = null) {
fun setViews(recyclerView: RecyclerView, swipeRefreshLayout: SwipeRefreshLayout? = null, callback: ((Int) -> Unit)? = null) {
this.recyclerView = recyclerView
this.swipeRefreshLayout = swipeRefreshLayout
updatePrimaryColor()
@ -52,6 +53,9 @@ class FastScroller : FrameLayout {
}
}
})
allowBubbleDisplay = callback != null
fastScrollCallback = callback
}
fun updatePrimaryColor() {
@ -162,15 +166,14 @@ class FastScroller : FrameLayout {
val targetPos = getValueInRange(0f, (itemCount - 1).toFloat(), proportion * itemCount).toInt()
(recyclerView!!.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(targetPos, 0)
fastScrollCallback?.invoke(targetPos)
}
}
override fun onFinishInflate() {
super.onFinishInflate()
handle = getChildAt(0)
if (allowBubbleDisplay) {
bubble = getChildAt(1) as? TextView
}
bubble = getChildAt(1) as? TextView
if (bubble != null) {
bubbleOffset = resources.getDimension(R.dimen.fastscroll_height).toInt()
@ -182,7 +185,7 @@ class FastScroller : FrameLayout {
handle!!.animate().alpha(1f).start() // override the fade animation
handle!!.alpha = 1f
if (handle!!.isSelected) {
if (handle!!.isSelected && allowBubbleDisplay) {
bubble?.animate()?.alpha(1f)?.start()
bubble?.alpha = 1f
}