zoukankan      html  css  js  c++  java
  • Material Design:CollapsingToolbarLayout

    activity_main.xml:

    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <android.support.design.widget.AppBarLayout
            android:id="@+id/appBar"
            android:layout_width="match_parent"
            android:layout_height="300dip"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" >
    
            <!-- app:expandedTitleGravity="left|bottom"扩张后Title位置还可以这么设置 -->
    
            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/collapsingToolbarLayout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_scrollFlags="scroll|exitUntilCollapsed"
                app:collapsedTitleGravity="left"
                app:contentScrim="#2196F3"
                app:expandedTitleMarginStart="20dp"
                app:title="zzw" >
    
                <ImageView
                    android:id="@+id/imageView"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:layout_collapseMode="parallax"
                    app:layout_collapseParallaxMultiplier="0.1"
                    android:scaleType="centerCrop"
                    android:src="@drawable/bg_default" />
    
                <android.support.v7.widget.Toolbar
                    android:id="@+id/toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize"
                    app:layout_collapseMode="pin"
                    android:minHeight="?attr/actionBarSize" >
                </android.support.v7.widget.Toolbar>
            </android.support.design.widget.CollapsingToolbarLayout>
        </android.support.design.widget.AppBarLayout>
    
        <android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" >
    
            <android.support.v7.widget.LinearLayoutCompat
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:padding="20dip"
                app:divider="?android:attr/listDivider"
                app:dividerPadding="5dp"
                app:showDividers="beginning|middle|end" >
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="50dp"
                    android:text="0" />
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="50dp"
                    android:text="1" />
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="50dp"
                    android:text="2" />
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="50dp"
                    android:text="3" />
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="50dp"
                    android:text="4" />
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="50dp"
                    android:text="5" />
            </android.support.v7.widget.LinearLayoutCompat>
        </android.support.v4.widget.NestedScrollView>
    
        <android.support.design.widget.FloatingActionButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_anchor="@id/appBar"
            app:layout_anchorGravity="bottom|end|right"
            android:src="@drawable/ic_launcher"
            app:backgroundTint="#64b5f6"
            app:backgroundTintMode="multiply"
            app:borderWidth="0dp"
            app:elevation="10dp"
            app:fabSize="normal"
            app:pressedTranslationZ="20dp"
            app:rippleColor="#1976d2" >
        </android.support.design.widget.FloatingActionButton>
    
    </android.support.design.widget.CoordinatorLayout>

    我们在CollapsingToolbarLayout中设置了一个ImageView和一个Toolbar。并把这个CollapsingToolbarLayout放到AppBarLayout中作为一个整体。

    1、在CollapsingToolbarLayout中:

    我们设置了layout_scrollFlags:关于它的值我这里再说一下:

    • scroll - 想滚动就必须设置这个。
    • enterAlways - 实现quick return效果, 当向下移动时,立即显示View(比如Toolbar)。
    • exitUntilCollapsed - 向上滚动时收缩View,但可以固定Toolbar一直在上面。
    • enterAlwaysCollapsed - 当你的View已经设置minHeight属性又使用此标志时,你的View只能以最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。
    其中还设置了一些属性,简要说明一下:
    • contentScrim - 设置当完全CollapsingToolbarLayout折叠(收缩)后的背景颜色。
    • expandedTitleMarginStart - 设置扩张时候(还没有收缩时)title向左填充的距离。还可以通过app:expandedTitleGravity="left|bottom"设置Title相对位置

    2、在ImageView控件中:

    我们设置了:

    • layout_collapseMode (折叠模式) - 有两个值:layout_collapseParallaxMultiplier(视差因子) - 设置视差滚动因子,值为:0~1。 
      • pin -  设置为这个模式时,当CollapsingToolbarLayout完全收缩后,Toolbar还可以保留在屏幕上。
      • parallax - 设置为这个模式时,在内容滚动时,CollapsingToolbarLayout中的View(比如ImageView)也可以同时滚动,实现视差滚动效果,通常和layout_collapseParallaxMultiplier(设置视差因子)搭配使用。
    3、在Toolbar控件中:
    我们设置了layout_collapseMode(折叠模式):为pin。
     
    综上分析:当设置了layout_behavior的控件响应起了CollapsingToolbarLayout中的layout_scrollFlags事件时,ImageView会有视差效果的向上滚动移除屏幕,当开始折叠时CollapsingToolbarLayout的背景色(也就是Toolbar的背景色)就会变为我们设置好的背景色,Toolbar也一直会固定在最顶端。
     
    【注】:使用CollapsingToolbarLayout时必须把title设置到CollapsingToolbarLayout上,设置到Toolbar上不会显示。即:
    mCollapsingToolbarLayout.setTitle(" ");
    该变title的字体颜色:
    扩张时候的title颜色:mCollapsingToolbarLayout.setExpandedTitleColor();
    收缩后在Toolbar上显示时的title的颜色:mCollapsingToolbarLayout.setCollapsedTitleTextColor();
    这个颜色的过度变化其实CollapsingToolbarLayout已经帮我们做好,它会自动的过度。
     
    JAVA代码:
    package com.zzw.testcollapsingtoolbarlayout;
    
    import android.app.Activity;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.support.design.widget.CollapsingToolbarLayout;
    import android.support.v7.widget.Toolbar;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            CollapsingToolbarLayout mCollapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsingToolbarLayout);
            mCollapsingToolbarLayout.setTitle("CollapsingToolbarLayout");// 设置标题
            mCollapsingToolbarLayout.setExpandedTitleColor(Color.RED);// 设置还没收缩时状态下字体颜色
            mCollapsingToolbarLayout.setCollapsedTitleTextColor(Color.WHITE);// 设置收缩后Toolbar上字体的颜色
    
            Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
            mToolbar.setLogo(R.drawable.ic_launcher);
            mToolbar.setNavigationIcon(android.R.drawable.ic_menu_delete);
    
        }
    
    }
  • 相关阅读:
    Java技术路线--2循环
    Java技术路线--1基本类型与包装类
    Linux内存管理之UMA模型和NUMA模型
    最长XX子串/数组/子序列
    epoll LT 模式和 ET 模式详解
    OS篇:OS中进程的阻塞与挂起的区别
    约瑟夫环问题
    最大公约数和最小公倍数
    C++之寻找素数(素数筛)
    Linux OOM机制分析
  • 原文地址:https://www.cnblogs.com/zzw1994/p/5072465.html
Copyright © 2011-2022 走看看