Разрешить NestedScrollView полностью прокрутить внутри BottomSheet с пользовательским поведением - PullRequest
0 голосов
/ 29 марта 2019

У меня есть нижний лист с дочерним NestedScrollView. Я хочу прокрутить весь NestedScrollView до самого дна, не сдвигая нижний лист вверх.

Если пользователь хочет, чтобы нижний лист прошел весь путь вверх, он должен использовать якорь иначе.

Теперь, когда вы используете прокрутку вниз, после прокрутки всего содержимого я хочу, чтобы нижний лист скрывался при следующем действии прокрутки.

Поскольку поведение нижнего листа по умолчанию не позволяет, я создал свое собственное поведение и переопределил onNestedScroll () и onNestedPreScroll ().

Есть две проблемы, с которыми я сталкиваюсь:

1: Nestedscrollview прокручивает частично и останавливается, потому что относительно нижнего листа он видит, что больше нет контента для прокрутки. Я должен сдвинуть лист, чтобы увидеть остальное содержимое. Означает, что я не вижу последний элемент в NestedScrollView без расширения листа.

2: Как я могу определить, прокручивает ли NestedScrollChild вверх или вниз. Потому что я хочу, чтобы BottomSheet перехватывал события, когда просмотр прокрутки заканчивал прокручивать его содержимое. Я попробовал onNestedPreScroll, но кажется, что он не обязательно срабатывает каждый раз, когда ребенок прокручивается. Является ли присоединение слушателя к scrollview единственным решением?

Ссылка для просмотра проблемы в GIF https://photos.app.goo.gl/RPmDFEtR9TbGHrau6

Ниже приведен мой макет и класс поведения.

<?xml version="1.0" encoding="utf-8"?>

<com.google.android.material.appbar.AppBarLayout
        android:id="@+id/appBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar">

    <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
    />
</com.google.android.material.appbar.AppBarLayout>
->
<androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/bs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/bottom_sheet_background_shaded"
        android:elevation="10dp"
        app:behavior_hideable="false"
        app:behavior_peekHeight="35dp"
        app:behavior_fitToContents="false"
        app:layout_behavior="com.pyus13.bottomsheetsample.MyBottomSheetBehaviour">

    <ImageView
            android:id="@+id/anchor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="1dp"
            android:src="@drawable/bottom_sheet_anchor_holder"
            app:layout_constraintBottom_toTopOf="@+id/main_container"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

    <androidx.core.widget.NestedScrollView
            android:id="@+id/main_container"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:clipToPadding="false"
            android:elevation="5dp"
            android:gravity="center"
            android:paddingTop="20dp"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/anchor">

        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">

            <Button
                    android:id="@+id/change_title"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Title 1"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Title 2"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Page 3"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Page 4"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Page 5"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Change Title"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Change Title"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Change Title"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Change Title"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Change Title"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Change Title"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Change Title"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Change Title"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Change Title"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Change Title"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Change Title"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Change Title"/>

            <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Change Title"/>


        </LinearLayout>

    </androidx.core.widget.NestedScrollView>

</androidx.constraintlayout.widget.ConstraintLayout>

Класс моего поведения:

class MyBottomSheetBehaviour<V : View> @JvmOverloads constructor(
    context: Context? = null, attrs: AttributeSet? = null) : BottomSheetBehavior<V>(context, attrs) {

private var isScrollingDown = false


override fun onInterceptTouchEvent(parent: CoordinatorLayout, child: V, event: MotionEvent): Boolean {
    if (state == STATE_COLLAPSED || state == STATE_HALF_EXPANDED) {
        return false
    }
    return super.onInterceptTouchEvent(parent, child, event)
}

override fun onStartNestedScroll(coordinatorLayout: CoordinatorLayout, child: V, directTargetChild: View, target: View, axes: Int, type: Int): Boolean {
    Log.d("Scroll", "OnNestedScroll EVent $child $target $axes $type")
    if (state == STATE_COLLAPSED || state == STATE_HALF_EXPANDED) {
        if (target.canScrollVertically(1) || target.canScrollVertically(-1)) {
            return false
        }
    }
    return super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, axes, type)
}

override fun onNestedPreScroll(coordinatorLayout: CoordinatorLayout, child: V, target: View, dx: Int, dy: Int, consumed: IntArray, type: Int) {
    isScrollingDown = dy > 0
    super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type)
}

}

Я хочу, чтобы подобное поведение, если кто-то может помочь, было бы по достоинству оценено.

enter image description here

...