Skip to content

Instantly share code, notes, and snippets.

@yongjhih
Last active September 19, 2023 04:01
Show Gist options
  • Save yongjhih/022b432a206334765a9aac72f9316502 to your computer and use it in GitHub Desktop.
Save yongjhih/022b432a206334765a9aac72f9316502 to your computer and use it in GitHub Desktop.
@RequiresApi(Build.VERSION_CODES.M)
fun View.scrollChanges() = callbackFlow {
val listener = View.OnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
trySendBlocking(Quintuple(v, scrollX, scrollY, oldScrollX, oldScrollY))
}
setOnScrollChangeListener(listener)
awaitClose { setOnScrollChangeListener(null) }
}
fun ViewTreeObserver.scrollChanges() = callbackFlow {
val listener = ViewTreeObserver.OnScrollChangedListener { trySendBlocking(Unit) }
addOnScrollChangedListener(listener)
awaitClose { removeOnScrollChangedListener(listener) }
}
fun View.scrollChangesCompact() =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) scrollChanges()
else viewTreeObserver.scrollChanges().scan(Quintuple(this, scrollX, scrollY, -1, -1)) { old, _ ->
val (_, oldX, oldY, _, _) = old
Quintuple(this, scrollX, scrollY, oldX, oldY)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment