材质设计的滚动技术

本文介绍了在Android中实现Google Material Design滚动效果的详细步骤,包括隐藏工具栏、选项卡滚动、灵活空间滚动等五种技术。通过Android Design Support Library,开发者可以更轻松地在应用中集成Material Design的滚动交互。
摘要由CSDN通过智能技术生成

介绍

去年,Google推出了Material Design,很明显,动作和动画将是现代Android应用程序中最引人注目的两个功能。 但是Google并没有为开发人员提供将其集成到应用程序中的简单解决方案。 结果,开发了许多库来解决集成问题。

但是,在今年的Google I / O中,Google引入了Android设计支持库 ,以简化Material Design的采用。 这使开发人员可以专注于使应用程序独特的功能。

1.地区

在本教程中,我将向您展示如何实现Google的Material Design规范中显示的滚动技术。 在开始之前,您应该熟悉Android应用程序中可用的可滚动区域。 在下图中,您可以看到有四个区域。

Android应用中的可滚动区域

状态栏

在此显示通知,并显示设备不同功能的状态。

工具列

该工具栏以前称为操作栏。 现在,它是具有相同功能的更可定制的视图。

标签/搜索栏

此可选区域用于显示对应用程序内容进行分类的选项卡。 您可以在Google的材料设计规范中详细了解标签的用法以及显示标签的不同方法。 如果合适,您也可以在Google的横向导航中使用它。

灵活的空间

在这里您可以显示图像或扩展的应用栏。

关于滚动技术,当应用程序的内容滚动时,是工具栏和选项卡/搜索栏响应。

2.项目设置

要继续学习,您应该使用最新版本的Android Studio。 您可以从Android Developer网站上获取它。 要尝试这些滚动技术,我建议创建一个新项目(最低API级别为15),因为您的应用程序的布局将发生重大变化。

我提供了一个入门项目,您可以从GitHub下载该项目。 您可以将启动程序项目用作起点,并在自己的应用程序中使用滚动技术。 首先,将以下依赖项添加到app文件夹中项目的build.gradle文件中:

compile 'com.android.support:design:22.2.0' 
compile 'com.android.support:recyclerview-v7:22.2.0'

有了第一个依赖关系,您将获得Android Design支持库,其中包括本教程需要的新类。

有了第二个依赖关系,您可以获得RecyclerView的最新版本。 有关创建列表的官方文章中列出的版本这次将不再有用。

接下来,您将需要一些虚拟数据来尝试这些技术并填充RecyclerView 。 您可以自己实现它们,也可以从入门项目中InitialActivity类复制实现。

3.滚动技术1

当滚动应用程序的内容时,此技术将隐藏工具栏区域。 您可以在以下视频中看到该技术的实际应用。

对于这种布局设计,您可能会想到以下内容:

<RelativeLayout
    … >
	<Toolbar 
		… />
	<RecyclerView
		… />
</RelativeLayout>

这种布局的问题在于,您必须自己管理事件,但是如果您利用新类,它将很轻松。 让我们对其进行如下修改:

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="co.herovitamin.androiddesignsupportlibraryapplication.CoordinatorLayoutAndAppBarActivity">
    <android.support.design.widget.AppBarLayout
        android:id="@+id/my_appbar_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" >
        <android.support.v7.widget.Toolbar
            android:id="@+id/technique_one_toolbar"
            style="@style/TechniqueToolbar"
            app:layout_scrollFlags="scroll|enterAlways">
            <!--
                scroll
                enterAlways
                enterAlwaysCollapsed
                exitUntilCollapsed
            -->
        </android.support.v7.widget.Toolbar>
    </android.support.design.widget.AppBarLayout>
    
    <android.support.v7.widget.RecyclerView
        android:id="@+id/days_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>

在这种新布局中,您可以看到:

  • RelativeLayout替换为CoordinatorLayout
  • Toolbar包装在AppBarLayout
  • ToolbarRecyclerView收到了一些其他属性

这些新课程是什么?

CoordinatorLayout

此布局是一个新的容器和一个FrameLayout ,可对子视图之间的触摸事件进行额外的控制。

AppBarLayout

此布局是另一个新容器,专门设计用于实现Material Design应用栏概念的许多功能。 请记住,如果在另一个ViewGroup使用它,则其大多数功能将无法使用。

这种滚动技术以及我们将要讨论的大多数其他滚动技术的关键是CoordinatorLayout类。 该特殊类可以从其子视图接收事件并将事件传递到其子视图,以便它们适当地响应。 它旨在用作根容器视图。

要启用此技术, app:layout_behavior属性指示哪个视图将触发Toolbar的事件。 在这种情况下,这就是RecyclerView

app:layout_behavior=“@string/appbar_scrolling_view_behavior"

Toolbarapp:layout_scrollFlags属性向视图指示如何响应。

app:layout_scrollFlags=“scroll|enterAlways"

app:layout_scrollFlags属性可以具有四个可能的值,可以将其组合以创建所需的效果:

scroll

应该为需要在屏幕外滚动的所有视图设置此标志。 不使用此标志的视图将固定在屏幕顶部。

enterAlways

该标志确保任何向下滚动都将使该视图变得可见,从而启用快速返回模式。

enterAlwaysCollapsed

当视图声明了minHeight并使用此标志时,该视图将仅以其最小高度(折叠)进入,仅在滚动视图到达其顶部时才扩展到其全高。

exitUntilCollapsed

此标志使视图在退出之前在屏幕外滚动直到其合拢(达到其minHeight )。

现在,您可以运行该项目,或按Control + R ,然后查看该技术的实际应用。

4.滚动技术2

此技术可在屏幕外滚动工具栏,而选项卡栏区域保持锚定在顶部。 您可以在以下视频中看到此技术的实际效果。

对于这种技术,我要重新使用以前的技术布局,并添加TabLayout旁边的视图Toolbar ,里面AppBarLayout

<android.support.design.widget.CoordinatorLayout
    ...
    <android.support.design.widget.AppBarLayout
        ...
        <android.support.v7.widget.Toolbar
            ...
            app:layout_scrollFlags="scroll|enterAlways"/>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/primary"
            />
    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        ...
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>

TabLayout视图提供了用于显示选项卡的水平布局。 您可以添加任意数量的使用选项卡的newTab方法以及使用该设置其行为模式setTabMode 。 让我们从填充选项卡开始。

tab_layout = (TabLayout) findViewById(R.id.tabs);

tab_layout.setTabMode(TabLayout.MODE_FIXED);
tab_layout.addTab(tab_layout.newTab().setText("Tab 1"));
tab_layout.addTab(tab_layout.newTab().setText("Tab 2"));
tab_layout.addTab(tab_layout.newTab().setText("Tab 3"));

通过更改app:layout_scrollFlags属性的值,并将其从ToolbarTabLayout添加和删​​除,您可以获得类似于以下内容的动画:

  • Google Play商店 ,其中工具栏隐藏,标签栏保持可见。
  • 工具栏位于顶部的选项卡栏在屏幕外滚动的Foursquare
  • 在工具栏和标签栏都在屏幕外滚动的情况下播放音乐

请观看以下视频,以获取有关此滚动技术的示例。



您可以运行您的项目,并查看实际的滚动技术。

5.滚动技术3

对于这种滚动技术,我将利用在本教程开头提到的灵活空间区域。 我这样做是AppBarLayout在内容向上滚动时缩小AppBarLayout的初始高度。 随着内容向下滚动, AppBarLayout的高度增加到其原始高度。 您可以在以下视频中看到此技术的实际效果。

对于这种滚动技术,我将使用以下布局:

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="co.herovitamin.androiddesignsupportlibraryapplication.CoordinatorLayoutAndAppBarActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/my_appbar_container"
        android:layout_width="match_parent"
        android:layout_height="192dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:background="@color/primary">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:contentScrim="@color/primary"
            app:expandedTitleMarginStart="48dp"
            app:expandedTitleMarginEnd="64dp">

            <android.support.v7.widget.Toolbar
                android:id="@+id/technique_three_toolbar"
                android:layout_height="?attr/actionBarSize"
                android:layout_width="match_parent"
                android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                app:layout_collapseMode="pin"/>

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

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

    <android.support.v7.widget.RecyclerView
        android:id="@+id/days_list_3"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:src="@drawable/plus"
        app:borderWidth="0dp"
        app:layout_anchor="@id/my_appbar_container"
        app:layout_anchorGravity="bottom|right|end" />

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

当然,它看起来像很多代码,所以让我们对其进行分解。 在此布局中,我进行了以下更改:

  • Toolbar包装在CollapsingToolBarLayout ,两个元素都放在AppBarLayout
  • app:layout_scrollFlags属性从Toolbar移到CollapsingToolBarLayout ,因为此容器现在负责响应滚动事件。
  • 新的属性app:layout_collapseMode已添加到Toolbar 。 此属性可确保Toolbar保持固定在屏幕顶部。
  • AppBarLayout的固定初始高度为192dp
  • RecyclerView下面的布局中添加了一个FloatingActionButton

这些新课程是做什么用的?

CollapsingToolBarLayout

这是一个新视图,专门用于包装Toolbar并实现折叠的应用程序栏。 使用CollapsingToolBarLayout类时,必须特别注意以下属性:

app:contentScrim

此属性指定完全折叠时要显示的颜色。

app:expandedTitleMarginStart/app:expandedTitleMarginEnd

这些属性指定扩展标题的边距。 如果您打算在活动中使用setDisplayHomeAsUpEnabled方法并填充在标题周围创建的新空间,它们将非常有用。

FloatingActionButton

浮动动作按钮是Material Design应用程序的重要组成部分。 现在,您只需几行代码就可以在布局中包含浮动操作按钮。 您可以使用app:fabSize属性从两个不同的大小中选择, 标准大小(56dp)和微型大小 (40dp)。 标准是默认大小。

通过使用app:layout_anchor属性将浮动操作按钮锚定到AppBarLayout可以自动实现消失效果。 您还可以使用app:layout_anchorGravity属性指定相对于此锚点的位置。

在运行项目之前,我们需要在活动中指定CollapsingToolBarLayout将显示标题而不是Toolbar 。 请看下面的代码片段以进行澄清。

collapsing_container = (CollapsingToolbarLayout) findViewById(R.id.collapsing_container);
collapsing_container.setTitle(getResources().getString(R.string.title_activity_technique3));

运行该项目,以查看正在使用的第三种滚动技术。

6.滚动技术4

此滚动技术使用先前技术中所示的扩展AppBarLayout来显示图像。 您可以在以下视频中看到此技术。

对于这项技术,我将重用之前的布局并对其进行一些修改:

<android.support.design.widget.CoordinatorLayout
    ...>

    <android.support.design.widget.AppBarLayout
        android:id="@+id/my_appbar_container"
        android:layout_width="match_parent"
        android:layout_height="192dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" >

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:contentScrim="@color/primary">

            <ImageView
                android:id="@+id/imgToolbar"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                android:src="@drawable/image"
                app:layout_collapseMode="parallax" />

            <android.support.v7.widget.Toolbar
                ...>

            </android.support.v7.widget.Toolbar>

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

    <android.support.v7.widget.RecyclerView
        .../>

    <android.support.design.widget.FloatingActionButton
        ... />
</android.support.design.widget.CoordinatorLayout>

在此布局中,我进行了以下修改:

  • android:background属性已从AppBarLayout中移除。 因为ImageView将填充此空间,所以不需要具有背景色。
  • 删除了app:expandedTitleMarginStartapp:expandedTitleMarginEnd属性,因为我们没有在活动中使用setDisplayHomeAsUpEnabled方法。
  • Toolbar 之前添加了ImageView 。 重要的是要避免在AppBarLayout显示图像的一部分而不是原色。

您可能还已经注意到ImageView具有app:layout_collapseMode属性。 该属性的值设置为parallax以实现视差滚动。 此外,您还可以添加app:layout_collapseParallaxMultiplier属性来设置乘数。

这些都是您要做的所有更改,才能使此滚动技术在您的应用中平稳运行。 运行项目以查看此滚动技术的实际效果。

7.滚动技术5

对于这种滚动技术,灵活空间与应用程序的内容重叠,并且在滚动内容时在屏幕外滚动。 您可以在以下视频中看到此技术的实际效果。

对于此技术,您可以进行一些小的修改就可以重复使用先前技术中的布局。

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="co.herovitamin.androiddesignsupportlibraryapplication.CoordinatorLayoutAndAppBarActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/my_appbar_container"
        android:layout_width="match_parent"
        android:layout_height="192dp"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            android:background="@color/primary">

            <android.support.v7.widget.Toolbar
                android:id="@+id/technique_five_toolbar"
                android:layout_height="?attr/actionBarSize"
                android:layout_width="match_parent"
                android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                app:layout_collapseMode="pin"
                android:background="@color/primary" />

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

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

    <android.support.v7.widget.RecyclerView
        android:id="@+id/days_list_5"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        app:behavior_overlapTop="64dp" />

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

对于此布局:

  • 删除了CollapsingToolbarLayout中的ImageViewFloatingActionButton 。 此技术不需要图像。
  • CollapsingToolbarLayoutapp:contentScrim属性已替换为android:background属性。 我们这样做是因为背景颜色在消失时需要与Toolbar背景颜色很好地匹配。
  • android:background属性已添加到Toolbar
  • app:behavior_overlapTop属性已添加到RecyclerView 。 这是此滚动技术最重要的属性,因为此属性指定视图与AppBarLayout的重叠量。 为了使此属性生效,应将其添加到具有app:layout_behavior属性的同一视图中。

如果您尝试将这种滚动技术用于这些修改,则生成的布局在Toolbar将没有标题。 为了解决这个问题,您可以创建一个TextView并以编程方式将其添加到Toolbar

TextView text = new TextView(this);
text.setText(R.string.title_activity_technique5);
text.setTextAppearance(this, android.R.style.TextAppearance_Material_Widget_ActionBar_Title_Inverse);

toolbar.addView(text);

结论

请注意,您无需在应用程序中实现所有这些技术。 有些对您的设计会比其他有用。 既然您知道如何实现每一个,就可以选择它们并进行试验。

希望本教程对您有所帮助。 如果喜欢,别忘了分享。 您可以在下面留下任何评论和问题。

翻译自: https://code.tutsplus.com/articles/scrolling-techniques-for-material-design--cms-24435

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值