1.DrawerLayout响应打开抽屉的手势不响应关闭抽屉的手势动作
在使用DrawerLayout时发现手势触发打开时正常关闭出现问题,问题原理是ViewDragHelper当中的checkTouchSlop方法,检查DrawerLayout布局中的第一个子最后一个子view是否是NavigationView。是就在processTouchEvent方法中执行刷新界面的方法。如果没有检查到子view是NavigationView那么就不会触发关闭的视图更新。
如下是问题代码,我们知道Android中view是从上到下去按顺序一层一层执行绘制,当把navigationView写入第一层导致checkTouchSlop方法中mCallback.getViewHorizontalDragRange(child)以及mCallback.getViewVerticalDragRange(child)这两行代码的child参数获取到的是xml布局的中DrawerLayout的最后一个子view。也就是ConstraintLayout,所以导致布局刷新失败。
修改之后的代码应该把NavigationView作为DrawerLayout的最后一个子View去进行添加
如上是修改之后的代码,可以进行正常的手势响应。
2.DrawerLayout和Banner滑动冲突的解决方法
就是将DrawerLayout设置为根布局,Fragment中或者Activity中的Banner为子布局,避免将DrawerLayout作为Fargment或者Activity中的同级布局出现,否则DrawerLayout中的OnTouchEvent事件将会响应将手势动作消费掉