使用DrawerLayout,当手指侧滑时,左侧抽屉菜单会覆盖中间布局,中间布局不会随手指拖动而移动。
要实现主界面跟随移动就需要监听drawer滑动事件。
DrawerLayout(this).addDrawerListener(object :DrawerLayout.DrawerListener{
override fun onDrawerSlide(drawerView: View, slideOffset: Float) {
}
override fun onDrawerStateChanged(newState: Int) = Unit
override fun onDrawerClosed(drawerView: View) = Unit
override fun onDrawerOpened(drawerView: View) = Unit
})
复制代码
在DrawerLayout的监听事件onDrawerSlide回调中对其进行操作,slideOffset是滑动的偏移值:会在0~1之间变化
override fun onDrawerSlide(drawerView: View, slideOffset: Float) {
//设置主布局随菜单滑动
val width = drawerView.width
main_root.translationX = width * slideOffset
//设置控件最先出现的位置
val paddingLeft = width * (1-0.618) * (1- slideOffset)
drawerView.setPadding(paddingLeft.toInt(),0,0,0)
}
复制代码
如果使用materialdrawer库的话也是一样的
DrawerBuilder()
.withActivity(this)
.withDrawerWidthDp(270)
.withOnDrawerListener(object :Drawer.OnDrawerListener{
override fun onDrawerClosed(drawerView: View?) = Unit
override fun onDrawerSlide(drawerView: View, slideOffset: Float) {
//设置主布局随菜单滑动
val width = drawerView.width
main_root.translationX = width * slideOffset
//设置控件最先出现的位置
val paddingLeft = width * (1-0.618) * (1- slideOffset)
drawerView.setPadding(paddingLeft.toInt(),0,0,0)
}
override fun onDrawerOpened(drawerView: View?) = Unit
})
复制代码