|
class BottomNavigationBehavior<V : View>(context: Context, attrs: AttributeSet) : |
|
CoordinatorLayout.Behavior<V>(context, attrs) { |
|
|
|
override fun layoutDependsOn(parent: CoordinatorLayout?, child: V, dependency: View?): Boolean { |
|
if (dependency is Snackbar.SnackbarLayout) { |
|
updateSnackbar(child, dependency) |
|
} |
|
return super.layoutDependsOn(parent, child, dependency) |
|
} |
|
|
|
override fun onStartNestedScroll( |
|
coordinatorLayout: CoordinatorLayout, child: V, directTargetChild: View, target: View, axes: Int, type: Int |
|
): Boolean { |
|
return axes == ViewCompat.SCROLL_AXIS_VERTICAL |
|
} |
|
|
|
override fun onNestedPreScroll( |
|
coordinatorLayout: CoordinatorLayout, child: V, target: View, dx: Int, dy: Int, consumed: IntArray, type: Int |
|
) { |
|
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type) |
|
child.translationY = max(0f, min(child.height.toFloat(), child.translationY + dy)) |
|
} |
|
|
|
private fun updateSnackbar(child: View, snackbarLayout: Snackbar.SnackbarLayout) { |
|
if (snackbarLayout.layoutParams is CoordinatorLayout.LayoutParams) { |
|
val params = snackbarLayout.layoutParams as CoordinatorLayout.LayoutParams |
|
|
|
params.anchorId = child.id |
|
params.anchorGravity = Gravity.TOP |
|
params.gravity = Gravity.TOP |
|
snackbarLayout.layoutParams = params |
|
} |
|
} |
|
} |