![Android App开发进阶与项目实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/109/44510109/b_44510109.jpg)
2.4.2 内部滑动与翻页滑动的冲突处理
在前面的手势冲突中,滚动视图是父视图,有时也是子视图,比如页面采用翻页视图的话,页面内的每个区域之间是左右滑动的关系,并且每个区域都可以拥有自己的滚动视图。如此一来,在左右滑动时,滚动视图反而变成翻页视图的子视图,前面的冲突处理办法就不能奏效了,只能另想办法。
自定义一个基于ViewPager的翻页视图是一种思路,另外还可以借鉴抽屉布局DrawerLayout。该布局允许左右滑动,在滑动时会拉出侧面的抽屉面板,常用于实现侧滑菜单。抽屉布局与翻页视图在滑动方面存在区别,翻页视图在内部的任何位置均可触发滑动事件,而抽屉布局只在屏幕两侧边缘才会触发滑动事件。
举个实际应用的例子,微信的聊天窗口是上下滚动的,在主窗口的大部分区域触摸都是上下滚动窗口,若在窗口左侧边缘按下再右拉,就会看到左边拉出了消息关注页面。限定某块区域接管特定的手势,这是一种处理滑动冲突行之有效的办法。
既然提到了抽屉布局,不妨稍微了解一下它。下面是DrawerLayout的常用方法:
- setDrawerShadow:设置首页面的渐变阴影图形。
- addDrawerListener:添加抽屉面板的拉出监听器,需实现DrawerListener的如下4个方法:
onDrawerSlide:抽屉面板滑动时触发。
onDrawerOpened:抽屉面板打开时触发。
onDrawerClosed:抽屉面板关闭时触发。
onDrawerStateChanged:抽屉面板的状态发生变化时触发。
- removeDrawerListener:移除抽屉面板的拉出监听器。
- closeDrawers:关闭所有抽屉面板。
- openDrawer:打开指定抽屉面板。
- closeDrawer:关闭指定抽屉面板。
- isDrawerOpen:判断指定抽屉面板是否打开。
抽屉布局不仅可以拉出左侧抽屉面板,还可以拉出右侧抽屉面板。左侧面板与右侧面板的区别在于:左侧面板在布局文件中的layout_gravity属性为left,右侧面板在布局文件中的layout_gravity属性为right。
下面是使用DrawerLayout的布局文件:
(完整代码见event\src\main\res\layout\activity_drawer_layout.xml)
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P69_17325.jpg?sign=1739293784-7JdoEtSv0w0HSUjs2FTum7Z4xMr16Vpp-0-225e1e37c0757932d855f5059b3b707f)
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P70_17326.jpg?sign=1739293784-wUZQyc7zcEOYwLit95Lgh02vmaKjNjZ3-0-08c98afa070d9437e24cecde05133501)
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P71_17327.jpg?sign=1739293784-GI3sbrTWnh8NjRVd0CiUiPLXJGtFaS78-0-cf6e909164d61c9ef1dcddee383d4686)
上述布局文件对应的页面代码如下:
(完整代码见event\src\main\java\com\example\event\DrawerLayoutActivity.java)
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P71_17329.jpg?sign=1739293784-SYFRruHKNtNC39h0cwSPMcRzETvUn5zx-0-605e4251107857f3cbf7758b2e262449)
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P72_17330.jpg?sign=1739293784-VDsbHPQg0mWtNr9XbotALR1T9vwq3Uyo-0-f1a7cf343f3aa3b35822ee29a69537c8)
抽屉布局的展示效果如图2-28~图2-30所示。图2-28为初始界面,图2-29为从左侧边缘拉出左边侧滑菜单的界面,图2-30为从右侧边缘拉出右边侧滑菜单的界面。
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P72_6960.jpg?sign=1739293784-mmLPnlu6vqdEu1aTR5g13gJItu0qC7HP-0-1fc0a4a4810c963c4854a22de370653f)
图2-28 演示抽屉布局的初始界面
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P73_6970.jpg?sign=1739293784-oABf4IGtTPkLsZeUfd0Lb4pqU1HTwGQ9-0-a3c96c0499475851e0d30db2287ca55d)
图2-29 从左侧边缘拉出侧滑菜单
![](https://epubservercos.yuewen.com/0C084D/23721623101012206/epubprivate/OEBPS/Images/Figure-P73_6971.jpg?sign=1739293784-LPEud3vtaOHLk0H0dK4EXUigJyC7zeWx-0-070f0f7c5de212467f57d532863845a4)
图2-30 从右侧边缘拉出侧滑菜单