Reputation: 11319
I am using the sample ScrollingActivity (included in the SDK) for testing parallax behavior. The sample uses a NestedScrollView in a CoordinatorLayout. When I scroll up from the bottom of the screen; the scroll stops at toolbar (even if my scroll has high velocity). As you can see in the attached image, multiple scrolls are needed to show the expanded AppBarLayout.
I need a smooth scroll for users to see expanded AppBarLayout. Interestingly, this issue does not happen if I use RecyclerView instead of NestedScrollView.
I am using build tool 23.0.3. Here is the layout XML :
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="me.deepakmishra.swipetests.ScrollingActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/app_bar_height"
android:fitsSystemWindows="true"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/toolbar_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_gravity="fill_vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="me.deepakmishra.swipetests.ScrollingActivity"
tools:showIn="@layout/activity_scrolling">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:text="@string/large_text" />
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
app:layout_anchor="@id/app_bar"
app:layout_anchorGravity="bottom|end"
app:srcCompat="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
Upvotes: 3
Views: 2586
Reputation: 31
Add android:fillViewport="true" and android:layout_gravity="fill_vertical" to your NestedScrollView. Hope this will help you.
Upvotes: 0
Reputation: 11319
I could not achieve this using CoordinatorLayout, essentially because I was not able to get an event which encapsulates velocity and position at the same time. CoordinatorLayout is providing velocity and position in separate callbacks, and using them is resulting in a stuttered movement.
I implemented parallax effect in a traditional fashion with custom handlers to track all scroll/fling operations.
Upvotes: 0