Android - Показать / скрыть панель инструментов в приложении при касании пользователя с анимацией скольжения вверх и вниз - PullRequest
0 голосов
/ 09 июля 2020

Я реализовал Показать / Скрыть панель инструментов, когда пользователь прокручивает список, используя CoordinatorLayout. И теперь я работаю Показать / скрыть панель инструментов в приложении android при касании пользователя в любом месте экрана. Я пробовал этот код, и он работает нормально:

        if (toolbar.getVisibility() == View.VISIBLE) {
            toolbar.setVisibility(View.GONE);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        } else {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            toolbar.setVisibility(View.VISIBLE);
        }

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

Ответы [ 3 ]

0 голосов
/ 09 июля 2020

Вы можете использовать предварительный просмотр макета движения: https://giphy.com/gifs/jpn6QpmT3dBtf3XYIS

Зависимость implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta6'

На странице «Дизайн» вашего макета найдите Дерево компонентов и щелкните правой кнопкой мыши root, а затем вы увидите опцию «Преобразовать в MotionLayout». Так и рекомендуется поступать. Потому что он автоматически генерирует XML-папку, в которой находится MotionScene. Если вы не хотите этого делать, вы можете вручную создать папку с именем xml и поместить в нее activity_main_scene. xml)

activity_main. xml

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout
        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:id="@+id/root"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
    
        <androidx.constraintlayout.motion.widget.MotionLayout
            android:id="@+id/motion_base"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layoutDescription="@xml/activity_main_scene"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
    
            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="?attr/colorPrimary"
                android:minHeight="?attr/actionBarSize"
                android:theme="?attr/actionBarTheme"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
    
        </androidx.constraintlayout.motion.widget.MotionLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>

activity_main_scene. xml (внутри xml папки, которая также находится внутри папки res)

<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto">

    <Transition
        motion:duration="1000"
        motion:constraintSetEnd="@+id/end"
        motion:constraintSetStart="@id/start">
        <OnClick
            motion:clickAction="transitionToEnd"
            motion:targetId="@+id/motion_base"/>
    </Transition>

    <ConstraintSet android:id="@+id/start" />

    <ConstraintSet android:id="@+id/end">

        <Constraint
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="invisible"/>

    </ConstraintSet>
</MotionScene>
0 голосов
/ 14 июля 2020
if (toolbar.getVisibility() == View.VISIBLE) {
    appbar.animate().translationY(-112).setDuration(600L)
            .withEndAction(new Runnable() {
                @Override
                public void run() {
                    toolbar.setVisibility(View.GONE);
                }
            }).start();
} else {
    toolbar.setVisibility(View.VISIBLE);
    appbar.animate().translationY(0).setDuration(600L).start();
} 
0 голосов
/ 09 июля 2020

Используйте следующий код при нажатии:

protected void toggleToolbarView() {
    isShown = !isShown;

    Transition transition = new Slide(Gravity.TOP);
    transition.setDuration(200);
    transition.addTarget(toolbar);

    TransitionManager.beginDelayedTransition(toolbar, transition);

    toolbar.setVisibility(isShownHeaderFooter ? View.VISIBLE : View.GONE);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...