CollapsingToolbarLayout с двумя представлениями, сделайте одну прокрутку, но не другую - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть активность с панелью инструментов и видом переработчика.В верхней части окна повторного просмотра у меня есть панель, которую я хочу прокручивать (чтобы перемещаться вместе со списком повторного просмотра).

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

Вид того, что они здесь делают:

https://i.imgur.com/fQA6bPH.gif

Но я не могу найти правильную комбинацию параметров с CollapsingToolbarLayout для достижения этого эффекта:

<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:gravity="center_horizontal"
    android:orientation="vertical"
    tools:context=".ui.profile.ProfileActivity">
    <android.support.design.widget.AppBarLayout
                android:id="@+id/profile_appbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/topbar_gradient"
                android:theme="@style/AppTheme.Dark">


                <android.support.design.widget.CollapsingToolbarLayout
                    android:orientation="vertical"
                    android:id="@+id/detail_collapsing"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:fitsSystemWindows="true"
                    app:layout_scrollFlags="scroll|exitUntilCollapsed">

                    <android.support.v7.widget.Toolbar
                        android:id="@+id/toolbar"
                        android:layout_width="match_parent"
                        android:layout_height="?android:attr/actionBarSize"
                        android:background="@drawable/topbar_gradient"
                        app:layout_collapseMode="none"
                        android:minHeight="?android:attr/actionBarSize" />

                    <LinearLayout
                        android:layout_marginTop="?actionBarSize"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="vertical"
                        app:layout_collapseMode="none"
                        app:layout_collapseParallaxMultiplier="0.5">


        ...


           </LinearLayout>

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

    <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">
    (...)
    </FrameLayout>


</android.support.design.widget.CoordinatorLayout>

Чтобы упростить, я изменил структуру следующим образом:

    <android.support.design.widget.CollapsingToolbarLayout
        android:orientation="vertical"
        android:id="@+id/detail_collapsing"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:contentScrim="?colorPrimary"
        android:fitsSystemWindows="true"
        app:layout_scrollFlags="scroll|enterAlways">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?android:attr/actionBarSize"
            android:background="@drawable/topbar_gradient"
            app:layout_collapseMode="pin"
            android:minHeight="?android:attr/actionBarSize" />

        <LinearLayout
            android:layout_marginTop="?actionBarSize"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_collapseMode="parallax"
            app:layout_collapseParallaxMultiplier="0.5">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:src="@drawable/bar"/>

        </LinearLayout>

    </android.support.design.widget.CollapsingToolbarLayout>

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

То же самое происходит, когда мы добавляем ImageView внутри CollapsingToolbarLayout, как это с parallax флагом app:layout_collapseMode:

<android.support.design.widget.CollapsingToolbarLayout
    android:id="@+id/collapsing_toolbar"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    app:contentScrim="?attr/colorPrimary"
    app:expandedTitleMarginEnd="64dp"
    app:expandedTitleMarginStart="48dp"
    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_scrollFlags="pin" />

            <ImageView
                android:src="@drawable/cheese_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:scaleType="centerCrop"
                app:layout_collapseMode="parallax" //Here is the solution
                android:minHeight="100dp" />

</android.support.design.widget.CollapsingToolbarLayout>

Так что вы можете добавить:

app:layout_collapseMode="parallax"

На ваш взгляд (LinearLayout) или что-то внутри.

Чтение: https://guides.codepath.com/android/handling-scrolls-with-coordinatorlayout#creating-parallax-animations

0 голосов
/ 31 января 2019

Я решил эту проблему, переместив панель инструментов за пределы AppBarLayout. Затем в настройках кода панели инструментов как SupportActionBar.

<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:gravity="center_horizontal"
    android:orientation="vertical"
    tools:context=".ui.profile.ProfileActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/profile_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/topbar_gradient"
        android:theme="@style/AppTheme.Dark">

        <android.support.design.widget.CollapsingToolbarLayout
            android:orientation="vertical"
            android:id="@+id/detail_collapsing"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:layout_scrollFlags="scroll|enterAlways">

            <LinearLayout
                android:layout_marginTop="?actionBarSize"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                app:layout_collapseMode="pin">

                ...

            </LinearLayout>

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

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
        (...)
    </FrameLayout>

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?android:attr/actionBarSize"
        android:background="@drawable/topbar_gradient"
        android:minHeight="?android:attr/actionBarSize" />
</android.support.design.widget.CoordinatorLayout>
0 голосов
/ 13 сентября 2018

Вам необходимо изменить это, чтобы получить желаемый эффект:

<android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/detail_collapsing"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        android:orientation="vertical"
        app:contentScrim="?colorPrimary"
        app:layout_scrollFlags="scroll|enterAlwaysCollapsed|exitUntilCollapsed"
        app:titleEnabled="false">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="?actionBarSize"
            android:orientation="vertical"
            app:layout_collapseMode="parallax"
            app:layout_collapseParallaxMultiplier="0.5">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:src="@drawable/bar" />
        </LinearLayout>

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?android:attr/actionBarSize"
            android:background="@drawable/topbar_gradient"
            android:minHeight="?android:attr/actionBarSize"
            app:layout_collapseMode="pin" />
</android.support.design.widget.CollapsingToolbarLayout>

Ваше изменение было в CollapsingToolbar, использование этих трех атрибутов "scroll|enterAlwaysCollapsed|exitUntilCollapsed" вместе изменит этот эффект.


Описание:

app:layout_collapseMode="" - атрибут, используемый для свертывания / закрепления дочерних представлений CollapsingToolbarLayout.

Для этого есть три атрибута:

none: вообще никаких эффектов.

pin: закрепить этот вид на CollapsingToolbar при прокрутке.

parallax: Скрыть вид параллельно скрытию CollapsingToolbar.

, поэтому, если вы Toolbar закреплены на CollapsingToolbarLayout, добавьте это свойство pin (которое будет прокручиваться на сворачивающейся панели инструментов при прокрутке) и parallax будет анимировать его до разрушилась .


Посмотрим

Как на самом деле работает прокрутка с использованием этих 4 атрибутов в app:layout_scrollFlags=""

scroll: Вид будет прокручиваться в прямой зависимости от прокрутки события (необходимо, иначе любой другой атрибут не будет работать)

enterAlways: При вводе (прокрутка на экране) вид будет прокрутить любое событие прокрутки вниз, независимо от того, прокрутка просмотра также прокрутка.

enterAlwaysCollapsed: Дополнительный флаг для 'enterAlways', который изменяет возвращаемое представление, чтобы только сначала вернуться к свернутая высота.

exitUntilCollapsed: При выходе (с прокруткой экрана) вид будет прокручиваться, пока не будет свернут.

snap: По окончании прокрутки, если вид виден только частично затем он будет привязан к ближайшему краю и прокручен.

Подробнее здесь & Демо здесь


Узнайте больше здесь: ссылка

...