视差效果和捕捉工具栏,如Google Play商店应用

时间:2016-12-25 16:02:29

标签: android material-design android-coordinatorlayout android-collapsingtoolbarlayout

我想创建像Google Play商店应用这样的用户界面。也就是说,它包含以下这些功能:

  • DrawerLayout
  • 视差效果
  • 用户向上滚动时输入的
  • 对齐工具栏
  • 顶部图片位于状态栏后面

我已经创建了布局以实现上述功能,除了两件事情外它工作正常:

  1. 工具栏在向上滚动时没有捕捉
  2. 视差效果不起作用
  3. 这是我的布局:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
    
        <android.support.design.widget.CoordinatorLayout
            android:id="@+id/coordinator_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true">
    
            <android.support.design.widget.AppBarLayout
                android:id="@+id/app_bar_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/green_dark"
                android:fitsSystemWindows="true">
    
                <android.support.design.widget.CollapsingToolbarLayout
                    android:id="@+id/collapsing_toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:fitsSystemWindows="true"
                    app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
                    app:contentScrim="@color/green_dark"
                    app:statusBarScrim="@color/green_dark"
                    app:titleEnabled="false">
    
                    <ImageView
                        android:id="@+id/top_app_imageview"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:adjustViewBounds="true"
                        android:fitsSystemWindows="true"
                        android:scaleType="centerCrop"
                        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_scrollFlags="scroll|enterAlways|snap"
                        app:layout_collapseMode="pin"
                        app:theme="@style/SearchToolbarStyle" />
    
                </android.support.design.widget.CollapsingToolbarLayout>
            </android.support.design.widget.AppBarLayout>
    
            <android.support.v7.widget.RecyclerView
                android:id="@+id/recycler_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingBottom="10dp"
                app:layout_behavior="@string/appbar_scrolling_view_behavior" />
        </android.support.design.widget.CoordinatorLayout>
    
    
        <android.support.design.widget.NavigationView
            android:id="@+id/navigation_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:elevation="6dp"
            app:headerLayout="@layout/layout_drawer_header"
            app:menu="@menu/drawer_menu" />
    
    </android.support.v4.widget.DrawerLayout>
    

    以下是我的gradle的样子:

    {
    ...
    buildToolsVersion "25.0.0"
    ...
    }
    
    dependencies {
        ....
        compile 'com.android.support:appcompat-v7:25.1.0'
        compile 'com.android.support:recyclerview-v7:25.1.0'
        compile 'com.android.support:support-v4:25.1.0'
        compile 'com.android.support:design:25.1.0'
        compile 'com.android.support:cardview-v7:25.1.0'
       ....
    }
    

    任何想法为什么parrallax效果不起作用以及如何实现快照的工具栏?

2 个答案:

答案 0 :(得分:1)

  1. Parallax效果不起作用的原因是我正在设置ImageView&#39; s(id:top_app_imageview)宽度和高度与setLayoutParams一致。以某种方式打断以获得正确的视差效果。解决方法是以编程方式设置AppBarLayout的宽度和高度,并将Imageview layout_height更改为match_parent
  2. 我通过将layout_scrollFlags的{​​{1}}更改为CollapsingToolbarLayout
  3. 来进行工具栏捕捉

答案 1 :(得分:0)

试试这个;

Toolbar中删除此行:

app:layout_collapseMode="pin"

只需在Toolbar

中使用此功能即可
app:layout_scrollFlags="scroll|enterAlways"

所以我们有:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:layout_scrollFlags="scroll|enterAlways"
    app:theme="@style/SearchToolbarStyle" />