Skip to content

Instantly share code, notes, and snippets.

@tizisdeepan
Created April 22, 2019 12:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tizisdeepan/04a636fd045e92d7964a27e60b2ebcca to your computer and use it in GitHub Desktop.
Save tizisdeepan/04a636fd045e92d7964a27e60b2ebcca to your computer and use it in GitHub Desktop.
LockableBottomSheetBehavior can be used to lock a bottom sheet ignoring the swipe to dismiss actions done by the user.
import android.content.Context
import com.google.android.material.bottomsheet.BottomSheetBehavior
import androidx.coordinatorlayout.widget.CoordinatorLayout
import android.util.AttributeSet
import android.view.MotionEvent
import android.view.View
class LockableBottomSheetBehavior<V : View>(context: Context, attrs: AttributeSet) : BottomSheetBehavior<V>(context, attrs) {
private var mLocked = false
fun setLocked(locked: Boolean) {
mLocked = locked
}
override fun onInterceptTouchEvent(parent: CoordinatorLayout, child: V, event: MotionEvent): Boolean {
var handled = false
if (!mLocked) {
handled = super.onInterceptTouchEvent(parent, child, event)
}
return handled
}
override fun onTouchEvent(parent: CoordinatorLayout, child: V, event: MotionEvent): Boolean {
var handled = false
if (!mLocked) {
handled = super.onTouchEvent(parent, child, event)
}
return handled
}
override fun onStartNestedScroll(coordinatorLayout: CoordinatorLayout, child: V, directTargetChild: View, target: View, nestedScrollAxes: Int): Boolean {
var handled = false
if (!mLocked) {
handled = super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes)
}
return handled
}
override fun onNestedPreScroll(coordinatorLayout: CoordinatorLayout, child: V, target: View, dx: Int, dy: Int, consumed: IntArray) {
if (!mLocked) {
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed)
}
}
override fun onStopNestedScroll(coordinatorLayout: CoordinatorLayout, child: V, target: View) {
if (!mLocked) {
super.onStopNestedScroll(coordinatorLayout, child, target)
}
}
override fun onNestedPreFling(coordinatorLayout: CoordinatorLayout, child: V, target: View, velocityX: Float, velocityY: Float): Boolean {
var handled = false
if (!mLocked) {
handled = super.onNestedPreFling(coordinatorLayout, child, target, velocityX, velocityY)
}
return handled
}
}
@tizisdeepan
Copy link
Author

USAGE

(LockableBottomSheetBehavior instance).setLocked(true / false)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment