折叠工具栏在轻弹时向下滚动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了折叠工具栏在轻弹时向下滚动相关的知识,希望对你有一定的参考价值。

当我执行非常快速的混蛋时,我遇到了CollapsingToolbarLayout的问题。隐藏appBar和tablayout也会发生同样的事情。

我需要工具栏隐藏在滚动和CollapsingToolbar崩溃。当滚动不那么快时,它工作正常。

但是当它很快 - 似乎appBar在此之后崩溃并扩展。但它没有扩大回来。


请看一下视频。

CollapsingToolbarLayout

appBar & tablayout


似乎this答案是我需要的,但它不起作用。


我的CollapsingToolbarLayout的xml:

    <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:background="@color/colorLightGray"
    android:clickable="true"
    android:fitsSystemWindows="true"
    android:orientation="vertical"
    >
  <android.support.design.widget.AppBarLayout
      android:id="@+id/app_bar_layout"
      android:layout_width="match_parent"
      android:layout_height="200dp"
      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"
        android:minHeight="?attr/actionBarSize"
        app:contentScrim="?attr/colorPrimary"
        app:expandedTitleMarginEnd="64dp"
        app:expandedTitleMarginStart="48dp"
        app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
        >
      <ImageView
          android:id="@+id/ivSectionCover"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:fitsSystemWindows="true"
          android:scaleType="centerCrop"
          app:layout_collapseMode="parallax"
          />
      <ImageView
          android:layout_width="match_parent"
          android:layout_height="130dp"
          android:layout_gravity="bottom"
          android:alpha="0.5"
          android:scaleType="fitXY"
          app:layout_collapseMode="pin"
          app:srcCompat="@drawable/background_gradient"
          />
      <android.support.v7.widget.Toolbar
          android:id="@+id/toolbar"
          android:layout_width="match_parent"
          android:layout_height="?attr/actionBarSize"
          app:layout_collapseMode="pin"
          app:layout_scrollFlags="scroll|enterAlways"
          app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
          />
    </android.support.design.widget.CollapsingToolbarLayout>
  </android.support.design.widget.AppBarLayout>
  <TextView
      android:id="@+id/tvEmptyList"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      android:text="@string/books_empty_list"
      android:textColor="@color/colorGray"
      android:textSize="18sp"
      android:visibility="gone"
      />
  <RelativeLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_marginBottom="?attr/actionBarSize"
      android:clickable="true"
      app:layout_behavior="@string/appbar_scrolling_view_behavior"
      >
    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true"
        android:fillViewport="true"
        >
      <RelativeLayout
          android:id="@+id/rlContent"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:clickable="true"
          >
        <android.support.v7.widget.RecyclerView
            android:id="@+id/rvBooksSection"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="4dp"
            android:layout_marginLeft="4dp"
            android:layout_marginRight="4dp"
            android:layout_marginTop="4dp"
            android:clickable="true"
            />
      </RelativeLayout>
    </android.support.v4.widget.NestedScrollView>
    <View
        android:layout_width="match_parent"
        android:layout_height="4dp"
        android:background="@drawable/toolbar_dropshadow"
        />
  </RelativeLayout>
</android.support.design.widget.CoordinatorLayout>
答案

不幸的是,我还没有找到解决方案,但我通过添加以下内容减少了混蛋的频率:

CoordinatorLayout.LayoutParams params =
    (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
if (behavior != null) {
  behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() {
    @Override public boolean canDrag(@NonNull AppBarLayout appBarLayout) {
      return false;
    }
  });
}
params.setBehavior(behavior);

我也编辑了这样的布局:

<android.support.design.widget.AppBarLayout
  android:id="@+id/app_bar_layout"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  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:background="@color/colorLightGray"
    android:fitsSystemWindows="true"
    android:minHeight="?attr/actionBarSize"
    app:contentScrim="@color/colorLightGray"
    app:expandedTitleMarginEnd="64dp"
    app:expandedTitleMarginStart="48dp"
    app:layout_scrollFlags="scroll|exitUntilCollapsed"
    >
  <ImageView
      android:id="@+id/ivSectionCover"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:fitsSystemWindows="true"
      android:scaleType="centerCrop"
      android:src="@color/colorLightGray"
      app:layout_collapseMode="parallax"
      />
  <ImageView
      android:layout_width="match_parent"
      android:layout_height="170dp"
      android:layout_gravity="bottom"
      android:alpha="0.5"
      android:scaleType="fitXY"
      app:layout_collapseMode="pin"
      app:srcCompat="@drawable/background_gradient"
      />
  <android.support.v7.widget.Toolbar
      android:id="@+id/toolbar"
      android:layout_width="match_parent"
      android:layout_height="?attr/actionBarSize"
      app:layout_collapseMode="pin"
      app:layout_scrollFlags="scroll|enterAlways|snap"
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
      />
</android.support.design.widget.CollapsingToolbarLayout>

另一答案

尝试删除属性Android:fitsSystemWindows =“true”或将其更改为false。看起来布局正在状态栏后面。适合系统窗口将允许布局超出状态栏甚至导航栏。

以上是关于折叠工具栏在轻弹时向下滚动的主要内容,如果未能解决你的问题,请参考以下文章

轻弹手势期间的内容偏移

UIScrollViewDelegate scrollViewDidScroll 方法跟不上高速滚动(轻弹)?

单元格中的 UITableView 动画导致平滑滚动中断

如何像足球一样轻弹 SKSpriteNode

iOS:用于平滑滚动和轻弹视图的手势识别器

折叠工具栏布局 |滚动和布局问题 2