Android-CoordinatorLayout.……Android_花式组件,自定义组件Android零碎知识点 & 业界讯息

Android实现悬浮布局效果

2019-02-22  本文已影响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即将快速滑动

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

上一篇 下一篇

猜你喜欢

热点阅读