Android Material Design : CollapsingToolbarLayout使用简介

简介: Android Material Design : CollapsingToolbarLayout使用简介我之前写了若干篇关于Android Material设计的文章:1,《Android Material ...


Android Material Design : CollapsingToolbarLayout使用简介

我之前写了若干篇关于Android Material设计的文章:
1,《Android Material Design的FloatingActionButton,Snackbar和CoordinatorLayout》http://blog.csdn.net/zhangphil/article/details/48861371
2,《Android Material Design:基于CoordinatorLayout实现向上滚动导航条ToolBar滚出、向下滚动导航条滚出》文章链接:http://blog.csdn.net/zhangphil/article/details/48877721
3《Android Material Design:CoordinatorLayout与NestedScrollView》文章链接:http://blog.csdn.net/zhangphil/article/details/48877865
4,《Android Material Design :LinearLayoutCompat添加分割线divider 》文章链接:http://blog.csdn.net/zhangphil/article/details/48899585

本文在前四篇文章的基础上,综合使用上述文章中涉及到的技术点,实现另外一种Android Material Design : CollapsingToolbarLayout。
效果如图所示:


上图所示就是Android Material Design 中引入的CollapsingToolbarLayout要实现的效果。
先给出实现上图效果的XML布局文件activity_main.xml代码然后再对照说明:

<?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"
    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" >

        <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="#ff5252"
            app:expandedTitleGravity="left|bottom"
            app:title="zhangphil" >

            <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/ic_launcher" />

            <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>


可以观察到,当整个页面由NestedScrollView触发向上滚动时候,android id为imageView的ImageView渐渐消失,当整个页面由NestedScrollView向下滚动时候,android id为imageView的ImageView渐渐出现。而整个过程中的Toolbar则固定(pin)在界面中。
对CollapsingToolbarLayout涉及到的几个关键属性加以说明。
(1) app:collapsedTitleGravity="left"。
在本例中就是那个title字段“zhangphil”,这个title值也可以由Toolbar的setTitle()完成,两者之间效果相同。app:collapsedTitleGravity="left"表示当头部的衬图ImageView消失后,此title(zhangphil)将回归到Toolbar的位置(left,right等位置),默认是left。

(2)app:contentScrim="#ff5252"。
app:contentScrim设置颜色值。是CollapsingToolbarLayout收缩后最顶部的颜色,就是图中顶部的红色。

(3)app:expandedTitleGravity="left|bottom"
app:expandedTitleGravity表示将此CollapsingToolbarLayout完全展开后,title(“zhangphil”)所处的位置,默认是left + bottom。
(4)app:layout_collapseMode=" "
此属性有两个值parallax和pin。Pin表示固定。parallax 则有一定的缩放效果。缩放效果和速率则可由app:layout_collapseParallaxMultiplier控制(值从0.0到1.0)。


测试的主Activity,MainActivity.java:

package zhangphil.materialdesign;

import android.app.Activity;
import android.os.Bundle;
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);
		
		Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
		mToolbar.setLogo(R.drawable.ic_launcher);
		mToolbar.setNavigationIcon(android.R.drawable.ic_menu_delete);
		mToolbar.setTitle("zhangphil");
		//mToolbar.setSubtitle("zhangphil副标题");
		//mToolbar.setSubtitleTextColor(Color.RED);
	}
}

相关文章
|
3月前
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
随着移动应用市场的蓬勃发展,用户对界面设计的要求日益提高。为此,掌握由Google推出的Material Design设计语言成为提升应用颜值和用户体验的关键。本文将带你深入了解Material Design的核心原则,如真实感、统一性和创新性,并通过丰富的组件库及示例代码,助你轻松打造美观且一致的应用界面。无论是色彩搭配还是动画效果,Material Design都能为你的Android应用增添无限魅力。
89 1
|
5月前
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
【7月更文挑战第28天】随着移动应用市场的发展,用户对界面设计的要求不断提高。Material Design是由Google推出的设计语言,强调真实感、统一性和创新性,通过模拟纸张和墨水的物理属性创造沉浸式体验。它注重色彩、排版、图标和布局的一致性,确保跨设备的统一视觉风格。Android Studio提供了丰富的Material Design组件库,如按钮、卡片等,易于使用且美观。
171 1
|
7月前
|
缓存 算法 Java
Linux内核新特性年终大盘点-安卓杀后台现象减少的背后功臣MGLRU算法简介
MGLRU是一种新型内存管理算法,它的出现是为了弥补传统LRU(Least Recently Used)和LFU(Least Frequently Used)算法在缓存替换选择上的不足,LRU和LFU的共同缺点就是在做内存页面替换时,只考虑内存页面在最近一段时间内被访问的次数和最后一次的访问时间,但是一个页面的最近访问次数少或者最近一次的访问时间较早,可能仅仅是因为这个内存页面新近才被创建,属于刚刚完成初始化的年代代页面,它的频繁访问往往会出现在初始化之后的一段时间里,那么这时候就把这种年轻代的页面迁移出去
|
7月前
|
存储 编解码 API
Android Media Framework(一)OpenMAX 框架简介
OpenMAX IL是Khronos Group为嵌入式和移动设备设计的低层级接口,用于统一调用音频、视频和图像编解码器,确保跨平台兼容性。它包括Core API(管理组件加载和方法调用)和Component API(组件实现,如源、接收器、编解码器等)。组件通过端口进行数据交互,客户端使用Core API加载和控制组件。Android引入OMX IL以支持不同芯片上的编解码器。组件状态包括Loaded、Idle、Executing和Invalid。组件架构涉及参数配置、命令处理和缓冲区管理,数据交换通过回调函数完成,端口持有预分配或组件自分配的缓冲区。
115 0
|
SQL 人工智能 Java
Android 命令行工具简介
Android SDK 中包含了开发应用所需的多个软件包。本页列出了可供使用的最重要的命令行工具(按提供这些工具的软件包整理)。
|
SQL 人工智能 移动开发
Android etc1tool之png图片转换pkm 和 zipalign简介
etc1tool 是一种命令行实用程序,可用于将 PNG 图片编码为 ETC1 压缩标准格式(PKM),并将 ETC1 压缩图片解码回 PNG。
|
Java Linux API
#1,Android 体系结构 2000字简介 入门Android(Studio)开发
#1,Android 体系结构 2000字简介 入门Android(Studio)开发
|
Java 测试技术 持续交付
百度搜索:蓝易云【NetMock简介:简化 Java,Android和Kotlin多平台中的HTTP请求测试?】
使用NetMock,您可以在单元测试、集成测试和端到端测试中轻松地模拟和验证HTTP请求和响应,而无需实际发送请求到外部服务。这样可以提高测试的可靠性和可控性,并加快测试执行的速度。无论是在开发过程中还是在持续集成环境中,NetMock都可以帮助您更轻松地进行HTTP请求测试,提高代码质量和稳定性。
67 1
|
7月前
|
Linux 网络安全 开发工具
Android APP入门之Android的简介以及Android Studio开发环境的搭建和测试(2022最新 图文解释 简单易懂)
Android APP入门之Android的简介以及Android Studio开发环境的搭建和测试(2022最新 图文解释 简单易懂)
174 0
|
XML Java 开发工具
Android apkanalyzer简介
Android apkanalyzer简介