学习使用Material Design控件(四)Android实现标题栏自动缩放、放大效果

本文要实现内容移动时,标题栏自动缩放/放大的效果,效果如下:

控件介绍

这次需要用到得新控件比较多,主要有以下几个:

CoordinatorLayout
组织它的子views之间协作的一个Layout,它可以给子View切换提供动画效果。
AppBarLayout
可以让包含在其中的控件响应被标记了ScrollingViewBehavior的View的滚动事件
CollapsingToolbarLayout
可以控制包含在CollapsingToolbarLayout其中的控件,在响应collapse时是移除屏幕和固定在最上面
TabLayout
结合ViewPager,实现多个TAB的切换的功能
NestedScrollView
与ScrollView基本相同,不过包含在NestedScrollView中的控件移动时才能时AppBarLayout缩放

Layout布局

<?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:fitsSystemWindows=“true”>

  <android.support.design.widget.AppBarLayout
    android:layout_width=“match_parent”
    android:layout_height=“256dp”
    android:fitsSystemWindows=“true”
    android:theme=“@style/ThemeOverlay.AppCompat.Dark.ActionBar”>

    <android.support.design.widget.CollapsingToolbarLayout
      android:id=“@+id/collapsing_toolbar”
      android:layout_width=“match_parent”
      android:layout_height=“match_parent”
      android:fitsSystemWindows=“true”
      app:contentScrim=“?attr/colorPrimary”
      app:expandedTitleMarginEnd=“64dp”
      app:expandedTitleMarginStart=“48dp”
      app:layout_scrollFlags=“scroll|exitUntilCollapsed”>

      <ImageView
        android:id=“@+id/ivImage”
        android:layout_width=“match_parent”
        android:layout_height=“match_parent”
        android:fitsSystemWindows=“true”
        android:scaleType=“centerCrop”
        android:src=“@drawable/book1”
        app:layout_collapseMode=“parallax”
        app:layout_collapseParallaxMultiplier=“0.7” />

      <android.support.v7.widget.Toolbar
        android:id=“@+id/toolbar”
        android:layout_width=“match_parent”
        android:layout_height=“?attr/actionBarSize”
        app:layout_collapseMode=“pin”
        app:popupTheme=“@style/ThemeOverlay.AppCompat.Light” />

    </android.support.design.widget.CollapsingToolbarLayout>

  </android.support.design.widget.AppBarLayout>

  <LinearLayout
    android:layout_width=“match_parent”
    android:layout_height=“match_parent”
    android:orientation=“vertical”
    app:layout_behavior=“@string/appbar_scrolling_view_behavior”>

    <android.support.design.widget.TabLayout
      android:id=“@+id/sliding_tabs”
      android:layout_width=“match_parent”
      android:layout_height=“wrap_content”
      app:tabGravity=“fill”
      app:tabMode=“fixed” />

    <android.support.v4.view.ViewPager
      android:id=“@+id/viewpager”
      android:layout_width=“match_parent”
      android:layout_height=“match_parent” />
  </LinearLayout>
</android.support.design.widget.CoordinatorLayout>

CollapsingToolbarLayout和TabLayout的使用说明可以参考探索新的Android Material Design支持库

代码实现

//Toolbar
 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
 setSupportActionBar(toolbar);
 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 toolbar.setNavigationOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view) {
     onBackPressed();
   }
 });

//使用CollapsingToolbarLayout后,title需要设置到CollapsingToolbarLayout上
 CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
 collapsingToolbar.setTitle("失控");

//设置ViewPager
 mViewPager = (ViewPager) findViewById(R.id.viewpager);
 setupViewPager(mViewPager);

//给TabLayout增加Tab, 并关联ViewPager
 TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
 tabLayout.addTab(tabLayout.newTab().setText("内容简介"));
 tabLayout.addTab(tabLayout.newTab().setText("作者简介"));
 tabLayout.addTab(tabLayout.newTab().setText("目录"));
 tabLayout.setupWithViewPager(mViewPager);

详细代码参见这里

项目源码已发布到Github,Material Design新控件基本介绍完了,
下篇文章会结合豆瓣读书的API,整合一下这些控件,做一个Demo。
源码地址:MaterialDesignExample

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Android Material Design自定义动画的编写

    新的动画Api,让你在UI控件里能创建触摸反馈,改变View的状态,切换activity的一系列自定义动画 具体有: 响应View的touch事件的触摸反馈动画 隐藏和显示View的循环展示动画 两个Activity间的切换动画 更自然的曲线运动的动画 使用View的状态更改动画,能改变一个或多个View的属性 在View的状态更改时显示状态列表动画 这些new animations Api,已内置在标准Widget中,如Button.在自定义view时也可使用这些api 动画在Material

  • Android5.0中Material Design的新特性

     Material Design简介 Material Design是谷歌新的设计语言,谷歌希望寄由此来统一各种平台上的用户体验,Material Design的特点是干净的排版和简单的布局,以此来突出内容. Material Design对排版.材质.配色.光效.间距.文字大小.交互方式.动画轨迹都做出了建议,以帮助设计者设计出符合Material Design风格的应用. Material Design设计语言鼓励大家使用充满活力的鲜艳色彩,并在同一界面建议使用三种色调,并保障有一个强色调,

  • 学习Android Material Design(RecyclerView代替ListView)

    本文实例实现一下 RecyclerView,代码比较简单,适合初学者,如有错误,欢迎指出. 复习 ListView 可以查看这篇文章深入浅出学习Android ListView基础,了解关于ListView 的基础知识. 实现过程中需要复写BaseAdapter,主要是这4个方法 public int getCount() :适配器中数据集中 数据的个数,即ListView需要显示的数据个数 public Object getItem(int position) : 获取数据集中与指定索引对应的

  • Material Design系列之Behavior实现Android知乎首页

    本博客目的:仿知乎首页向上滑动时动画隐藏Toolbar.FlocationActionButton.Tab导航,下滑时显示,如果和你的期望不同,那么你可以不需要看了,免的浪费你的宝贵时间噢. 效果预览 知乎效果: 本博客实现效果: 今天效果的源代码下载链接在文章末尾. 实现分析 这个效果其实并不难实现,但是它的用处很大,当用户手指上滑,屏幕上显示下方内容的时候,隐藏Toolbar.Tab导航.FAB来腾出更大的空间显示内容,让用户爽.简单粗暴,但这就是我们的目的. 首先就是头部的Toolbar,

  • Android App仿QQ制作Material Design风格沉浸式状态栏

    一.概述 近期注意到QQ新版使用了沉浸式状态栏,ok,先声明一下效果图: 恩,接下来正题. 首先只有大于等于4.4版本支持这个半透明状态栏的效果,但是4.4和5.0的显示效果有一定的差异,所有本文内容为: 1.如何实现半透明状态栏效果在大于4.4版本之上. 2.如何让4.4的效果与5.0的效果尽可能一致. 先贴下模拟器效果图,以便和实现过程中做下对比 4.4 模拟器 5.x 真机 二.实现半透明状态栏 因为本例使用了NavigationView,所以布局代码稍多,当然如果你不需要,可以自己进行筛

  • Android构建Material Design应用详解

    长久以来.Android的UI并不算美观,以至于很多IT公司在进行界面设计的时候,为了保证双平台的统一性,强烈要求Android端的界面风格必须与iOS端一致,我认为这里非常不合理的,同一操作系统中各个应用之间的界面统一性要远比一个应用在双平台的界面统一性重要的多,只有这样,才能给使用者带来更好的用户体验.为了解决这个问题,Google公司在2014年IO大会上推出了一套全新的界面设计语言--Material Design(材料设计语言),这次Google在界面设计上确实下足了功夫,一个词,好看

  • 学习使用Material Design控件(三)使用CardView实现卡片效果

    本文主要介绍CardView的使用,CardView是继承自FrameLayout,使用比较简单,只需要用CardView包含其他View就可以实现卡片效果了. 实现效果如下: 加入依赖库 dependencies { -. compile 'com.android.support:cardview-v7:22.2.0' } Layout布局 <android.support.v7.widget.CardView android:layout_width="match_parent&quo

  • 学习使用Material Design控件(四)Android实现标题栏自动缩放、放大效果

    本文要实现内容移动时,标题栏自动缩放/放大的效果,效果如下: 控件介绍 这次需要用到得新控件比较多,主要有以下几个: CoordinatorLayout 组织它的子views之间协作的一个Layout,它可以给子View切换提供动画效果. AppBarLayout 可以让包含在其中的控件响应被标记了ScrollingViewBehavior的View的滚动事件 CollapsingToolbarLayout 可以控制包含在CollapsingToolbarLayout其中的控件,在响应colla

  • 学习使用Material Design控件(一)

    Google 发布的Material Design支持库,对我们的APP设计有很大的影响,如果重新设计APP,支持库应该直接用V4提升到V7了,我们可以用Toolbar代替ActionBar,以及引入了RecycleView, SnakeBar等新控件. 我写了一个Demo来学习使用这些新控件. 新建项目,加入依赖包 我们使用Android Studio来开发这个Demo,在Android Studio新建一个项目,修改App Module的build.gradle文件,把compileSdkV

  • 学习使用Material Design控件(二)使用DrawerLayout实现侧滑菜单栏效果

    本文介绍如何使用DrawerLayout和NavigationView实现侧滑菜单栏的效果. 效果如下: Layout布局 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+

  • Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解

    本文实例讲述了Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法.分享给大家供大家参考,具体如下: 相关内容: tkinter的使用 1.模块的导入 2.使用 3.控件介绍 Tk Button Label Frame Toplevel Menu Menubutton Canvas Entry Message Text Listbox Checkbutton Radiobutton Scale Scrollbar 首发时间:2018-03-04 16:39 Python的GU

  • OpenLayer学习之自定义测量控件

    OpenLayer 学习之自定义测量控件(目前ol3的版本不会抛异常) 一.自定义控件是在继承基类空间基础上实现的,控件不是我写的(毕竟技术有限)最近也在一直在研究源码进行模仿想写出自己的功能更为强大的控件. 二.控件源码 1.css样式设置 .tooltip { position: relative; background: rgba(0, 0, 0, 0.5); border-radius: 4px; color: white; padding: 4px 24px 4px 8px; opac

  • Python深度学习实战PyQt5基本控件使用解析

    目录 1. PyQt5 控件简介 1.1 什么是控件 1.2 编辑控件的属性 1.3 PyQt5 的控件类型 输入控件: 显示控件: 高级控件: 2. 按钮控件 2.1 按钮控件简介 2.2 按键按钮(QPushButton) 2.3 其它按钮 3. 输入控件 3.1 输入控件简介 3.2 文本输入控件 3.3 调节输入控件 4. Python 应用程序调用图形界面 1. PyQt5 控件简介 1.1 什么是控件 控件也称控件对象,是 Qt用户界面上最基本的组件类型,也是构成用户界面的基本结构.

  • Android学习教程之日历控件使用(7)

    本文实例为大家分享了Android日历控件的使用方法,供大家参考,具体内容如下 MainActivity.java代码: package siso.timessquare; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; p

  • React Native学习教程之Modal控件自定义弹出View详解

    前言 最近在学习RN,好多知识都懒得写,趁今天有空,来一发吧,Modal控件的一个小demo:下面话不多说了,来一起看看详细的介绍吧. 参考文章地址:http://reactnative.cn/docs/0.27/modal.html#content Modal组件可以用来覆盖包含React Native根视图的原生视图(如UIViewController,Activity). 在嵌入React Native的混合应用中可以使用Modal.Modal可以使你应用中RN编写的那部分内容覆盖在原生视

  • Android倒计时控件 Splash界面5秒自动跳转

    现在很多app的首页都有一个倒计时控件,比如说3秒或者5秒自动跳转界面,或者点击控件直接跳过 首先,自定义控件CircleProgressbar(参考网上资料) package com.zhoujian.mykeep.view; import android.annotation.TargetApi; import android.content.Context; import android.content.res.ColorStateList; import android.content.

随机推荐