Android实现悬浮布局效果

作者: 山上的神仙 | 来源:发表于2019-02-22 15:14 被阅读218次

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

    Screen Record_2019-02-22-15-00-37.gif
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".ThirdActivity">
    
        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <!--必须在layout_scrollFlags中添加scroll属性
            代表着这个布局是可以被收纳的
            -->
            <TextView
                android:background="@color/black"
                android:textColor="@color/white"
                android:gravity="center"
                android:text="这是需要滑动的布局"
                android:layout_width="match_parent"
                app:layout_scrollFlags="scroll"
                android:layout_height="200dp" />
            <TextView
                android:background="@color/blue"
                android:text="这是需要悬浮的布局"
                android:textColor="@color/white"
                android:gravity="center"
                android:layout_width="match_parent"
                android:layout_height="100dp" />
    
        </android.support.design.widget.AppBarLayout>
    
        <!--这里必须添加layout_behavior
        这里的意思是,把AppBarLayout和RecyclerView进行绑定在一块
        从而进行滑动的相应事件处理
        -->
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerview"
            android:layout_width="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView>
    
    </android.support.design.widget.CoordinatorLayout>
    

    实现要点如下:

    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实现悬浮布局效果

        本文链接:https://www.haomeiwen.com/subject/gwkeyqtx.html