【问题标题】:Collapsing the header image with scrolling the recyclerview通过滚动回收器视图折叠标题图像
【发布时间】:2018-01-20 00:07:35
【问题描述】:

我有一个这样的 XML 布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="realup.ir.teacher.MainActivity">

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/header">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/app_bar_head">
        <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|enterAlways"
            android:id="@+id/collapse_toolbar">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:scaleType="centerCrop"
                android:src="@drawable/realup"
                android:id="@+id/header_image"/>


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

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

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



<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/recycle"
    android:layout_below="@+id/header"/>

</RelativeLayout>

如您所见,我有一个 recyclerview,我希望当 recyclerview 向下滚动时,Image 视图与滚动 recyclerview 一起折叠。你能帮助我吗?提前谢谢你:)

【问题讨论】:

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


    【解决方案1】:

    您的 RecyclerView 应该在 Coordinatorlayout 中以执行动画并使用 NestedScrollView 作为 RecyclerView 的父级:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="realup.ir.teacher.MainActivity">
    
    <android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/header">
    
        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/app_bar_head">
            <android.support.design.widget.CollapsingToolbarLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_scrollFlags="scroll|enterAlways"
                android:id="@+id/collapse_toolbar">
    
                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:adjustViewBounds="true"
                    android:scaleType="centerCrop"
                    android:src="@drawable/realup"
                    android:id="@+id/header_image"/>
    
    
            </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.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/recycle"/>
    
        </android.support.v4.widget.NestedScrollView>
    
    </android.support.design.widget.CoordinatorLayout>
    </RelativeLayout>
    

    要获得平滑的滚动效果,请在您的代码中添加:

    RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycle);
    recyclerView.setNestedScrollingEnabled(false);
    

    希望这会有所帮助。

    对不起我的英语。

    【讨论】:

    • 谢谢你,开发者 ;)
    • 不客气 :) 如果不需要,可以删除相关布局
    【解决方案2】:

    CoordinatorLayout为父布局,将RecyclerView放入FrameLayout;

     <android.support.design.widget.CoordinatorLayout
        android:id="@+id/coordinator"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <android.support.design.widget.AppBarLayout
            android:id="@+id/appbar"
            android:background="#e7e5e5"
            android:layout_marginLeft="-20dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|enterAlways"
            android:id="@+id/collapse_toolbar">
    
            <ImageView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:scaleType="centerCrop"
                android:src="@drawable/realup"
                android:id="@+id/header_image"/>
    
    
        </android.support.design.widget.CollapsingToolbarLayout>
        </android.support.design.widget.AppBarLayout>
    
        <FrameLayout
            android:id="@+id/dashboard_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">
    
            <android.support.v7.widget.RecyclerView
                android:id="@+id/task_list"
                android:scrollbars="vertical"
                android:paddingBottom="85dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                app:layout_behavior="@string/appbar_scrolling_view_behavior"
                android:layout_marginTop="10dp"
                android:clipToPadding="false"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
    
            </android.support.v7.widget.RecyclerView>
    
            </FrameLayout>
    </android.support.design.widget.CoordinatorLayout>
    

    【讨论】:

    • 你的意思是,我应该删除作为整个屏幕的父级的相对布局?
    • 评论您的整个 xml 并将其放入并检查发生了什么
    • 把你自己的recyclerview id放到xml中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多