Android实现悬浮布局效果

利用google的design包里的CoordinatorLayout和AppBarLayout即可快速便捷实现,先看一下实现的效果图,如下:

Screen Record_2019-02-22-15-00-37.gif



    

        
        
        

    

    
    


实现要点如下:

  1. 首先需要用CoordinatorLayout包住AppBarLayout

  2. 顶部可以滚动隐藏和悬停的部分都放在AppBarLayout里面

  3. 与AppBarLayout平级的部分放一个带有可滚动的View,比如上面的例子RecyclerView

  4. 在第2步中可以滚动隐藏的View里面加上app:layout_scrollFlags="scroll"

  5. 在第3步添加的可滚动的View加上app:layout_behavior="@string/appbar_scrolling_view_behavior"

很多萌新在看见behavior是有点懵b的,我也比较懵,其实这是一个映射路径,最终指向desing包里面的一个appbar_scrolling_view_behavior类,如图:


图1.png

我们可以继承这个类 写自定义的,也可以通过反射,去修改滑动的效果,实现一些状态栏渐变的效果

自定义Behavior可以选择重写以下的几个方法有:

onInterceptTouchEvent():是否拦截触摸事件

onTouchEvent():处理触摸事件

layoutDependsOn():确定使用Behavior的View要依赖的View的类型

onDependentViewChanged():当被依赖的View状态改变时回调

onDependentViewRemoved():当被依赖的View移除时回调

onMeasureChild():测量使用Behavior的View尺寸

onLayoutChild():确定使用Behavior的View位置

onStartNestedScroll():嵌套滑动开始(ACTION_DOWN),确定Behavior是否要监听此次事件

onStopNestedScroll():嵌套滑动结束(ACTION_UP或ACTION_CANCEL)

onNestedScroll():嵌套滑动进行中,要监听的子 View的滑动事件已经被消费

onNestedPreScroll():嵌套滑动进行中,要监听的子 View将要滑动,滑动事件即将被消费
(但最终被谁消费,可以通过代码控制)

onNestedFling():要监听的子 View在快速滑动中

onNestedPreFling():要监听的子View即将快速滑动

至于怎么实现效果,就要看你的需求了。

你可能感兴趣的:(Android实现悬浮布局效果)