Android使用CoordinatorLayout和BottomSheetBehavior实现滑动效果(底部抽屉)
2018-02-20 23:10
5665 查看
因为需要在安卓中实现底部的滑动抽屉效果,然后找了SlidingDrawer、Slidingmenu等等第三方的实现方案,发现基本已经被淘汰了,然后找到了一个官方的侧滑菜单DrawerLayout,但是这玩意只能侧滑。。。还有一个功能非常接近的控件——ButtonSheet,但是限制太多,实现复杂。
最后,发现了一个好东西——CoordinatorLayout(这里是官方文档),是个很新鲜的东西( Google IO/15 大会发布),用来和其他控件联动交互。它的功能很多,这里就来说说用它的layout_behavior中的BottomSheetBehavior实现滑动抽屉效果。
首先放上XML
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/23/9c015f43689fa05420895d6f6aa6ea2c)
主界面和滑动部分的页面是放在一起的,在你需要滑动的view里面加上app:layout_behavior="android.support.design.widget.BottomSheetBehavior"这么一行就让界面带上了滑动效果。但是这样是不够的,首先要知道,BottomSheet是有这几个状态的:
STATE_DRAGGING, STATE_SETTLING, STATE_EXPANDED, STATE_COLLAPSED, STATE_HIDDEN.
分别是拖拽中,静止,拉伸,折叠,隐藏(没有官方的翻译,大致意思是这样的)
如果只是单纯加上了这条属性,没有添加其他控制方法的话,你会发现如果手滑让它隐藏了,你就再也见不到你的抽屉了!
所以我们要加上这两条属性:app:behavior_hideable="false"
app:behavior_peekHeight="150dp"第一条使它不可隐藏,第二条使它能露出一点点让你拖动。
到此为止效果是实现了,但是会出现一个小bug,如果抽屉弹出后下方是有按钮的,那么即使看不见也能被触发。。。
所以,就要通过BottomSheetBehavior的回调函数控制按钮的状态,回避这个bugbehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if(newState==STATE_EXPANDED){
button.setClickable(false);
}
if(newState==STATE_COLLAPSED){
button.setClickable(true);
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});以上。
PS:安卓所有依赖包的版本号:https://developer.android.google.cn/topic/libraries/support-library/revisions.html
最后,发现了一个好东西——CoordinatorLayout(这里是官方文档),是个很新鲜的东西( Google IO/15 大会发布),用来和其他控件联动交互。它的功能很多,这里就来说说用它的layout_behavior中的BottomSheetBehavior实现滑动抽屉效果。
首先放上XML
主界面和滑动部分的页面是放在一起的,在你需要滑动的view里面加上app:layout_behavior="android.support.design.widget.BottomSheetBehavior"这么一行就让界面带上了滑动效果。但是这样是不够的,首先要知道,BottomSheet是有这几个状态的:
STATE_DRAGGING, STATE_SETTLING, STATE_EXPANDED, STATE_COLLAPSED, STATE_HIDDEN.
分别是拖拽中,静止,拉伸,折叠,隐藏(没有官方的翻译,大致意思是这样的)
如果只是单纯加上了这条属性,没有添加其他控制方法的话,你会发现如果手滑让它隐藏了,你就再也见不到你的抽屉了!
所以我们要加上这两条属性:app:behavior_hideable="false"
app:behavior_peekHeight="150dp"第一条使它不可隐藏,第二条使它能露出一点点让你拖动。
到此为止效果是实现了,但是会出现一个小bug,如果抽屉弹出后下方是有按钮的,那么即使看不见也能被触发。。。
所以,就要通过BottomSheetBehavior的回调函数控制按钮的状态,回避这个bugbehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if(newState==STATE_EXPANDED){
button.setClickable(false);
}
if(newState==STATE_COLLAPSED){
button.setClickable(true);
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});以上。
PS:安卓所有依赖包的版本号:https://developer.android.google.cn/topic/libraries/support-library/revisions.html
相关文章推荐
- Android使用BottomSheetBehavior 和 BottomSheetDialog实现底部弹窗
- 反编译简书app和小红书app滑动效果sticky粘性头布局的实现CoordinatorLayout+behavior
- Android 使用CoordinatorLayout实现滚动标题栏效果的实例
- android 使用DrawerLayout实现滑动抽屉
- android使用ViewPager实现底部菜单栏和左右滑动效果,加载多个Activity
- Android 使用DrawerLayout实现抽屉效果的导航菜单
- Android 使用CoordinatorLayout实现滚动标题栏效果
- Android 使用CoordinatorLayout实现滚动标题栏效果
- Android Design Library(二)使用CoordinatorLayout布局实现联动效果
- Android 使用CoordinatorLayout实现滚动标题栏效果
- 【Android进阶】使用Andbase快速开发框架实现常见侧滑栏和滑动标签页组合效果
- Android---使用ViewPager来实现屏幕滑动效果
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- 【Android进阶】使用Andbase快速开发框架实现常见侧滑栏和滑动标签页组合效果
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- android 中使用TabHost控件实现微信界面的底部菜单效果
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果