android - 使用 NestedScrollView、AppBarLayout 和 CoordinatorLayout 平滑滚动和 Fling

标签 android android-appbarlayout android-collapsingtoolbarlayout android-nestedscrollview

我正在开发一个将 AppBarLayout 与 CollapsingToolbarLayout 和 NestedScrollView 一起使用的应用程序。我已经成功实现了这一点,并且运行良好。

现在我想要做的是,在 Nestedscrollview 上一扔(快速向上滑动)它应该完全滚动到顶部。同样,在向屏幕底部滑动(快速向下滑动)时,它必须平滑滚动到底部。但是现在,它只会卡在两者之间,这使它看起来很难看。 我在这里尝试了许多可用的解决方案,但对我没有任何帮助。我当前的设置如下。

    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:zhy="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="RtlHardcoded">

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

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/main.collapsing"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <ImageView
            android:id="@+id/placeholder"
            android:layout_width="match_parent"
            android:layout_height="246dp"
            android:scaleType="fitXY"
            android:tint="#11000000"
            app:layout_collapseMode="parallax"
            app:layout_collapseParallaxMultiplier="0.9" />


        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:padding="10dp">


            <FrameLayout
                android:id="@+id/back_frame"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="left|center_vertical"
                android:paddingBottom="5dp"
                android:paddingLeft="5dp"
                android:paddingRight="10dp"
                android:paddingTop="5dp">

                <ImageView
                    android:id="@+id/back_image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:src="@drawable/abc_ic_ab_back_mtrl_am_alpha" />
            </FrameLayout>


            <FrameLayout
                android:id="@+id/frameLayoutheart"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"

                android:layout_gravity="right|center_vertical"
                android:paddingBottom="5dp"
                android:paddingLeft="10dp"
                android:paddingRight="5dp"
                android:paddingTop="5dp">

                <ImageView
                    android:id="@+id/favbtnicon"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:src="@drawable/heart_profile" />
            </FrameLayout>


        </FrameLayout>

        <FrameLayout
            android:id="@+id/main.framelayout.title"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:layout_gravity="bottom|center_horizontal"
            android:orientation="vertical"

            app:layout_collapseMode="parallax"
            app:layout_collapseParallaxMultiplier="0.3">

            <LinearLayout
                android:id="@+id/main.linearlayout.title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:gravity="top"
                android:orientation="vertical">


                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"

                    android:orientation="horizontal">

                    <TextView
                        android:id="@+id/profileName"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="25dp"
                        android:inputType="textNoSuggestions"
                        android:singleLine="true"
                        android:text="Ankita arora"
                        android:textColor="@android:color/white"
                        android:textSize="25sp"
                        android:textStyle="bold" />


                    <ImageView
                        android:id="@+id/onlinestatus"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="29dp"
                        android:src="@drawable/online"
                        android:visibility="visible" />
                </LinearLayout>


                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:orientation="horizontal">

                    <TextView
                        android:id="@+id/age"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:inputType="textCapSentences"
                        android:text="asdas"
                        android:textColor="@android:color/white"
                        android:textSize="13sp" />


                    <TextView
                        android:layout_width="4dp"
                        android:layout_height="4dp"
                        android:layout_gravity="center"

                        android:layout_marginLeft="4dp"
                        android:layout_marginRight="4dp"
                        android:background="@drawable/white_dot" />

                    <TextView
                        android:id="@+id/sex"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:inputType="textCapSentences"
                        android:text="asdas"
                        android:textColor="@android:color/white"
                        android:textSize="13sp" />


                    <TextView
                        android:id="@+id/loc_point"
                        android:layout_width="4dp"
                        android:layout_height="4dp"
                        android:layout_gravity="center"

                        android:layout_marginLeft="4dp"
                        android:layout_marginRight="4dp"
                        android:background="@drawable/white_dot" />


                    <TextView
                        android:id="@+id/loc"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:inputType="textCapSentences"
                        android:text="asdas"
                        android:textColor="@android:color/white"
                        android:textSize="13sp" />

                </LinearLayout>


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


<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="none"
    app:behavior_overlapTop="10dp"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"

    >

    ------content--------------


     </android.support.v4.widget.NestedScrollView>


<android.support.v7.widget.Toolbar
    android:id="@+id/main.toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/pinkColor"
    android:visibility="invisible"
    app:contentInsetEnd="0dp"
    app:contentInsetStart="0dp"
    app:layout_anchor="@id/main.framelayout.title"
    app:theme="@style/ThemeOverlay.AppCompat.Dark"
    app:title="">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/back"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:layout_gravity="left|center_vertical"
            android:layout_marginLeft="4dp"
            android:src="@drawable/abc_ic_ab_back_mtrl_am_alpha"
            android:visibility="invisible" />

        <Space
            android:layout_width="@dimen/image_final_width"
            android:layout_height="@dimen/image_final_width" />


        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="8dp"
            android:gravity="center"
            android:orientation="vertical">

            <TextView
                android:id="@+id/main.textview.title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"

                android:layout_gravity="left"
                android:text="@string/quila_name2"
                android:textColor="@android:color/white"
                android:textSize="20sp" />

            <TextView
                android:id="@+id/status"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="left"
                android:layout_marginTop="-4dp"
                android:text="@string/quila_name2"
                android:textColor="@android:color/white"
                android:textSize="12sp" />


        </LinearLayout>

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

<de.hdodenhof.circleimageview.CircleImageView
    android:id="@+id/profileimg"
    android:layout_width="@dimen/image_width"
    android:layout_height="@dimen/image_width"
    android:layout_gravity="center_horizontal"

    app:border_color="@android:color/white"
    app:border_width="2dp"
    app:finalHeight="@dimen/image_final_width"
    app:finalYPosition="2dp"
    app:layout_behavior="com.sdl.apps.yaarri.views.AvatarImageBehavior"
    app:startHeight="2dp"
    app:startToolbarPosition="2dp"
    app:startXPosition="2dp" />

下面显示的最被接受的答案之一对我也不起作用。

Unable to scroll AppBarLayout and collapsing toolbar with NestedScrollView smoothly

最佳答案

当我熬夜时,这个图书馆就像 bat 侠一样来了

https://github.com/henrytao-me/smooth-app-bar-layout

根据哪些行为可以通过以下步骤改进:

1.改变

 android.support.design.widget.AppBarLayout

 me.henrytao.smoothappbarlayout.SmoothAppBarLayout and set android:id

2.删除

 app:layout_behavior="@string/appbar_scrolling_view_behavior"

3.将标题添加到您的 NestedScrollView 或 RecyclerView

这实际上使它像魅力一样工作。

最终的设置看起来像

                <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.v4.widget.NestedScrollView
                    android:id="@+id/nested_scroll_view"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <LinearLayout
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:orientation="vertical"
                      android:paddingLeft="16dp"
                      android:paddingRight="16dp"
                      android:paddingTop="@dimen/app_bar_height">

                      <TextView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="16dp"
                        android:layout_marginTop="16dp"
                        android:text="@string/text_short" />

                      <TextView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="16dp"
                        android:text="@string/text_long" />
                    </LinearLayout>
                  </android.support.v4.widget.NestedScrollView>

                  <me.henrytao.smoothappbarlayout.SmoothAppBarLayout
                    android:id="@+id/smooth_app_bar_layout"
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/app_bar_height">

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

                      <android.support.v7.widget.Toolbar
                        android:id="@+id/toolbar"
                        app:layout_collapseMode="pin"
                        app:navigationIcon="@drawable/ic_menu_arrow_back"
                        style="@style/AppStyle.MdToolbar" />
                    </android.support.design.widget.CollapsingToolbarLayout>
                  </me.henrytao.smoothappbarlayout.SmoothAppBarLayout>
                </android.support.design.widget.CoordinatorLayout> 

如果您在此处实现此问题时仍然遇到任何问题,如果此答案有帮助,我很乐意提供帮助并标记。

关于android - 使用 NestedScrollView、AppBarLayout 和 CoordinatorLayout 平滑滚动和 Fling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38119661/

相关文章:

android - menu.xml 中定义的可绘制矢量图标未显示在 appBar 中?

android - 使用 MaterialToolbar 在 AppBarLayout 中居中标题

android - 折叠工具栏在 coordinatorlayout 中滚动时不折叠

android: 实现推送通知

android - 在 Android 的按钮上画一条线?

android - ListView 未在 NestedScrollView 内扩展

向上滚动时Android折叠工具栏显示工具栏

android - 如何在 recyclerView 向下滚动时折叠后隐藏工具栏

Android - 启动线程会导致应用程序崩溃

android - 如何将现有的 make 文件与 Android NDK 合并