我需要的是SwipeRefresh动画必须从带有CollapsingToolbar的CoordinatorLayout内部的屏幕顶部开始。 如果将RecyclerView包装在SwipeRefreshLayout中,则动画将从CollapsingToolbarLayout下面开始。 如果我将整个CoordinatorLayout包装在SwipeRefreshLayout中,则该行为将不会非常精确,并且在第一次滑动后也不会起作用。
这是在CollipesingToolbar下面显示SwipeRefresh动画的布局:
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:fitsSystemWindows="true">
<net.telekom.smartcity.custom.OscaAppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:layout_height="@dimen/services_toolbar_height"
android:theme="@style/ThemeOverlay.AppCompat.Light"
android:windowDrawsSystemBarBackgrounds="true"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsingToolbarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentScrim="@android:color/white"
android:minHeight="?attr/actionBarSize"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:toolbarId="@id/marketplaceToolbar"
android:fitsSystemWindows="true">
<ImageView
android:id="@+id/zoomableImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="matrix"
android:layout_gravity="center"
app:layout_collapseMode="parallax"
android:fitsSystemWindows="true"/>
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black35a"
android:fitsSystemWindows="true"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/services_toolbar_title_top_margin"
android:layout_marginStart="@dimen/services_toolbar_infobox_margin_start"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/marketplace_toolbar_message1"
android:textSize="@dimen/services_toolbar_title_size"
android:paddingBottom="@dimen/services_toolbar_title_padding_bottom"
android:textColor="@color/white"
style="@style/RobotoBold"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/services_toolbar_title_description_top_margin"
android:text="@string/services_toolbar_message2"
android:textColor="@color/white"
android:textSize="@dimen/services_toolbar_description_size"
style="@style/RobotoLight"/>
</LinearLayout>
<androidx.appcompat.widget.Toolbar
android:id="@+id/marketplaceToolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
android:fitsSystemWindows="false">
<LinearLayout
android:id="@+id/toolbarCityBox"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_gravity="start">
<ImageView
android:id="@+id/toolbarCoat"
android:layout_width="@dimen/toolbar_coa_size"
android:layout_height="@dimen/toolbar_coa_size"
android:layout_gravity="center_vertical"/>
<TextView
android:id="@+id/toolbarTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/toolbar_title_size"
android:layout_marginStart="16dp"
android:layout_gravity="center_vertical"
android:textColor="@color/black"
style="@style/RobotoMedium"
/>
</LinearLayout>
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</net.telekom.smartcity.custom.OscaAppBarLayout>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>