FloatingActionButton при прокрутке вниз скрытого эффекта - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь скрыть floatingActionButton при прокрутке вниз и снова отображать при прокрутке вверх, я использовал setOnScrollChangeListener для ScrollView, чтобы сделать это

XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".DetailsActivity"
    android:orientation="vertical">

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_anchor="@id/linearLayout"
        app:layout_anchorGravity="start|bottom"
        android:layout_margin="16dp"
        android:src="@drawable/icons8_share_480"
        />

код

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
                @Override
                public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
                    if (scrollY > 0 && fab.isShown()) {
                        fab.setVisibility(View.GONE);
                    } else if (scrollY < 0) {
                        fab.setVisibility(View.VISIBLE);

                    }
                }
            });
        } else {
            scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
                @Override
                public void onScrollChanged() {
                    int mScrollY = scrollView.getScrollY();
                    if (mScrollY > 0 && fab.isShown()) {
                        fab.setVisibility(View.GONE);
                    } else if (mScrollY < 0) {
                        fab.setVisibility(View.VISIBLE);
                    }
                }
            });
        }

результат .Кажется, что работает, но иногда возникают две проблемы, когда прокрутка вверх не появляется, во-вторых, она исчезает напрямую без каких-либо эффектов, чем больше пояснений в этом GIF Destination .

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Благодаря @JEFF, после мониторинга OnScrollChangeListener я изменил значение в условии наscrollY < 22 и оно появляется снова.Что касается второго вопроса, я искал Как сделать анимацию, и я обнаружил, что есть два способа сделать это

первый должен использовать fab.hide и fab.show вместо метода setVisibility();

код после редактирования

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            scrollView.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
             //   Log.d("ScrollView","scrollX_"+scrollX+"_scrollY_"+scrollY+"_oldScrollX_"+oldScrollX+"_oldScrollY_"+oldScrollY);
                if (scrollY > 0 && fab.isShown()) {
                    fab.hide();
                } else if (scrollY < 22) {
                    fab.show();

                }
            });
        } else {
            scrollView.getViewTreeObserver().addOnScrollChangedListener(() -> {
                int mScrollY = scrollView.getScrollY();
                if (mScrollY > 0 && fab.isShown()) {
                    fab.hide();
                } else if (mScrollY < 22) {
                    fab.show();
                }
            });
        }

Второй способ использует пользовательские анимации масштаба для увеличения, уменьшения, как это ответ

0 голосов
/ 12 февраля 2019

Проблема в том, что после прокрутки снизу вверх это правда, что она будет скрыта, но она не может знать, когда вы прокрутите вверх, потому что ваше mScrollY < 0 в позиции не действительно меньше 0. Попробуйте использовать код из этого, он может дать позицию старой и новой позиции, после чего вы можете сравнить ее, чтобы знать, когда вы начнете прокручивать вверх или вниз

Это ссылка: https://stackoverflow.com/a/33230992/10396176

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