折叠效果

作者: 玖玖君 | 来源:发表于2019-07-11 16:09 被阅读7次

    AppBarLayout

    这个玩意很好用,反正我已经在 app 里面用CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+Toolbar实现了好多让 iOS 目瞪狗呆的效果。不过话说回来,实现归实现,每次实现都是去找别人的博客,然后一顿 CV 大法,然后属性参数到处乱配置,最终效果达到,然后提交代码不管。

    至于各个类是干嘛的,有哪些方法,我都不 care。当然咯,程序员首先得先满足产品的需求,CV 大法的前提也是你知道

    CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+Toolbar这些东西能够实现你的需求。所以,程序员的见识很重要。这里我给广大的 Android 猿们推荐一款Chrome浏览器插件“掘金”。对,没错,就是稀土掘金发布的,我觉得这个插件用起来别稀土掘金的官网简洁多了,主要是便捷,节省信息检索时间。扯远了,会用是程序员的最低要求,想要更进一步,当然是去看源码,理解如何实现。
    任何形式的转载都请联系作者获得授权并注明出处。

    官方翻译是

    AppBarLayout是一个实现了许多 MaterialDesign app bar 思想(即滚动手势)的垂直布局。
    子控件需要通过setScrollFlags()或 app:"layout_scrollFlags"来提供他们的滑动行为。这个 View 作为一个子 View,对 CoordinatorLayout 依赖性很强,如果CoordinatorLayout不是父View,很多功能会失效。

    最后一句话翻译起来有点别扭,就是说 AppBarLayout 需要给他依赖度 View 设置 ScrollingViewBehavoir 来监听依赖的 View 什么时候滚动。

    Public methods

    addOnOffsetChangedListener 添加便宜量监听,就是监听 AppBarLayout 的可见高度变化
    
    removeOnOffsetChangedListener 移除
     
    setExpanded 设置展开或者收缩
    
    generateLayoutParams 生成 LayoutParams。一般用不到
    
    setOrientation 不用关心的方法,方向只能是 vertical
    
    getTotalScrollRange 获取最大滚动偏移量
    
    setTargetElevation 设置 Z 轴高度
    
     
    
    CollapsingToolbarLayout
    Collapsing title 折叠标题
    
    Content scrim    内容布
    
    Status bar scrim 状态栏布
    
    parallax scrolling children 视差滚动子 View
    
    pinned position children 固定子 view 的位置
     
    

    总结:如果需要折叠标题之类的如上功能,则把 AppBarLayout 里面的所有子 view 移到CollapsingToolbarLayout节点下,然后把CollapsingToolbarLayout作为 AppBarLayout 的唯一子节点。

    内容具体实现功能方法

    expandedTitleMargin 展开时 title 的 margin
    
    expandedTitleTextAppearance 展开时候title 的文字 style
    
    contentScrim 在缩放时,内容遮盖的颜色
    
    statusBarScrim 状态栏颜色
    
    toolbarId 指定了 toolbar 而已,用不用无所谓,源码里面有就用,没有就遍历子 View 找到 toolbar。
    
    scrimVisibleHeightTrigger 设置收起多少高度时,显示内容遮盖颜色
    
    scrimAnimationDuration 内容遮盖颜色动画持续时间
    
    collapsedTitleGravity 折叠时,title 的位置
    
    expandedTitleGravity 展开时,title 的位置
    
    titleEnabled 是否开启折叠 title
    
    layout_collapseMode
    
    none 跟随滚动的手势进行折叠
    
    parallax 视差滚动
    
    pin 不动
    
    layout_collapseParallaxMultiplier 滚动因子,取值0-1,1是完全不动
    
    
    

    实现代码

    <?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"
        android:fitsSystemWindows="true"
        tools:context=".fragment.GankListFragment">
    
        <android.support.design.widget.AppBarLayout
            android:id="@+id/main.appbar"
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:fitsSystemWindows="true"
            app:titleEnabled="true"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
            //折叠的toolbar
            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/ctl"
                android:layout_width="match_parent"
                android:layout_height="250dp"
                app:contentScrim="@color/ccc"
                android:fitsSystemWindows="true"
                app:collapsedTitleGravity="center"
                app:expandedTitleMarginEnd="64dp"
                app:expandedTitleMarginStart="48dp"
                app:layout_scrollFlags="scroll|exitUntilCollapsed|enterAlwaysCollapsed">
    
                <ImageView
                    android:id="@+id/iv_tu"
                    android:layout_width="match_parent"
                    android:layout_height="250dp"
                    android:fitsSystemWindows="true"
    
                    android:scaleType="centerCrop"
                    android:src="@mipmap/zaohua"
                    app:layout_collapseMode="parallax"
                    app:layout_collapseParallaxMultiplier="0.2"
                    />
    
                <android.support.v7.widget.Toolbar
                    android:id="@+id/toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    app:title="干货集中营"
                    />
            </android.support.design.widget.CollapsingToolbarLayout>
    
            <android.support.design.widget.TabLayout
                android:id="@+id/tab"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                />
        </android.support.design.widget.AppBarLayout>
        <android.support.v4.view.ViewPager
            android:id="@+id/vp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            />
    </android.support.design.widget
    

    相关文章

      网友评论

        本文标题:折叠效果

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