#####最近需要实现一个类似百度地图搜索美食上滑弹出一个覆盖面板。网上也有很多的开源项目像 [Android Sliding Up Panel]
#####Android的Android Support Library 23.2里的 Design Support Library也有一个新的控件Bottom Sheets。用起来也比较简单。CoordinatorLayout作为父布局 子布局只需要设置layout_behavior就可以了

         

然后在代码中获取BottomSheetBehavior对象设置参数

View mBehiviorView = findViewById(R.id.bottom_sheet);BottomSheetBehavior   mBottomSheetBehavior = BottomSheetBehavior.from(behiviorView);mBottomSheetBehavior.setHideable(true);mBottomSheetBehavior.setPeekHeight(height/2);

peekHeight 是当Bottom Sheets关闭的时候,底部下表我们能看到的高度.
hideable 是当我们拖拽下拉的时候,bottom sheet是否能全部隐藏。

显示、隐藏、折叠效果可以通过设置状态来实现

mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED)

BottomSheetBehavior为我们提供了5中状态

STATE_COLLAPSED: 关闭Bottom Sheets,显示peekHeight的高度,默认是0
STATE_DRAGGING: 用户拖拽Bottom Sheets时的状态
STATE_SETTLING: 当Bottom Sheets view释放时记录的状态。
STATE_EXPANDED: 当Bottom Sheets 展开的状态
STATE_HIDDEN: 当Bottom Sheets 隐藏的状态

如果你需要监听Bottom Sheets回调的状态,可以通过setBottomSheetCallback来实现,onSlide方法是拖拽中的回调,根据slideOffset可以做一些动画 onStateChanged方法可以监听到状态的改变

bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {            @Override            public void onStateChanged(@NonNull View bottomSheet, int newState) {            }            @Override            public void onSlide(@NonNull View bottomSheet, float slideOffset) {                            }});

这样从屏幕底部滑出面板的效果就实现了

之后又需要实现bottomSheetBehavior从折叠到完全展开的时候让顶部的搜索框也一起滑动隐藏,从展开到折叠状态时搜索框滑动显示,从折叠到隐藏状态时搜索框不动。这时就想到了之前用到的app:layout_scrollFlags=“scroll|enterAlways” 但是这个属性在和嵌套了Recycleview的bottomSheetBehavior配合使用时会出现Recycleview向下滑动时搜索框就一起向下滑动显示了,放弃这种做法。最后只能从Bottom Sheets回调着手了

其实解决起来也比较简单,将搜索框布局放到最上层。在onSlide回调中通过scrollTo的方式实现

@Overridepublic void onSlide(@NonNull View bottomSheet, float slideOffset) {       if(slideOffset > 0) {             ((View) header.getParent()).scrollTo(0, (int) ((header.getHeight() + headerMargin) * slideOffset));       } }

这只是一种解决方法,网上也看到好多解决方法还要好好研究一下啊

更多相关文章

  1. 保存和重入Activity 状态的最简单方法
  2. Android(安卓)基于NetworkCallback的网络状态监听框架
  3. Android应用去掉标题栏状态栏(Android(安卓)Studio)
  4. [qualcomm android] sim card status processing
  5. 使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音
  6. Android沉浸式
  7. Android(安卓)BCM4330 蓝牙BT驱动调试记录
  8. android开发之滑动效果实现图片浏览_ViewFilpper的使用
  9. Android:TabLayout向上滑动停留页面顶部

随机推荐

  1. MySQL基于group_concat()函数合并多行数
  2. MySQL如何基于Explain关键字优化索引功能
  3. MySQL Like模糊查询速度太慢如何解决
  4. MySQL手动注册binlog文件造成主从异常的
  5. MySQL取消了Query Cache的原因
  6. MySQL备份恢复设计思路
  7. MySQL IFNULL判空问题解决方案
  8. MySQL利用索引优化ORDER BY排序语句的方
  9. MySQL中row_number的实现过程
  10. MySQL唯一索引和普通索引选哪个?