Изображение значка с плавающей кнопкой действий не отображается после скрытия и показа - PullRequest
0 голосов
/ 01 ноября 2018

Привет, я разрабатываю приложение для Android с плавающей кнопкой действия.

В первый раз значок FAB показывает изображение значка. После того, как я скрою и покажу значок, изображение будет пустым, когда я нажму значок FAB

Это код, который используется для скрытия FAB

   mainScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
            @Override
            public void onScrollChanged() {
                // previousScrollY this variable is define in your Activity or Fragment
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Log.i(TAG, "onScrollChanged: scrollview position " + mainScrollView.getScrollY() + " " +
                                previousScrollY + " " +
                                mainScrollView.getChildAt(0).getHeight());
                        if (mainScrollView.getScrollY() > previousScrollY) {
                            fab.hide();
                        } else if (mainScrollView.getScrollY() < previousScrollY) {
                            fab.show();
                        }
                        if (mainScrollView.getScrollY() >= mainScrollView.getChildAt(0).getHeight()) {
                            previousScrollY = mainScrollView.getChildAt(0).getHeight();
                        } else if (mainScrollView.getScrollY() < 0) {
                            previousScrollY = 0;
                        } else {
                            previousScrollY = mainScrollView.getScrollY();
                        }
                    }
                }, 200);
            }

        });

при прокрутке вниз значок FAB будет скрыт, а при прокрутке вверх появится значок FAB.

А это код для FAB setOnClicklistener

    fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (sheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
                    sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
                    fab.setImageResource(R.drawable.ic_close);
                } else {
                    sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
                    fab.setImageResource(R.drawable.ic_filter);
                }
            }
        });

Это потрясающее изображение, которое появляется перед прокруткой и первой загрузкой Before Scrolling and first time loading opening fab

Before Scrolling and first time loading closing Fab

это изображение после прокрутки и щелчка.

fab icon image after scrolling and clicking.

Ответы [ 5 ]

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

Я решил это путем вызова функции скрытия и показа снова в onCreateView

fab.hide();
fab.show();
0 голосов
/ 13 февраля 2019

используйте это

 fab.setVisibility(View.VISIBLE); && fab.setVisibility(View.GONE);

настоящие

fab.show(); &&  fab.hide();
0 голосов
/ 27 января 2019

Я знаю, что прошло много времени с тех пор, как вы опубликовали это, но у меня была та же проблема. Я решил это, выполнив hide () и затем show () для потрясающего после щелчка. (В моем конкретном случае я изменяю drawable в onClick. Выполнение hide () и show () после изменения drawable решило проблему).

Ваш код должен выглядеть так:

fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (sheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
                    sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
                    fab.setImageResource(R.drawable.ic_close);
                } else {
                    sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
                    fab.setImageResource(R.drawable.ic_filter);
                }
                fab.hide();
                fab.show();
            }
        });
0 голосов
/ 13 февраля 2019

Столкнулся с той же проблемой с зависимостью com.google.android.material:material:1.0.0. Обновление версии до 1.1.0-alpha3 устранило проблему.

0 голосов
/ 01 ноября 2018

Ваш код выглядит нормально. По моему мнению, единственное, что может вызвать такое поведение - это обработчик задержки в вашем onScrollChanged. Пожалуйста, перейдите к объявлению вашего глобального FloatingActionButton fab и сделайте его static. Посмотрите, поможет ли это.

PS: Если это не помогает, попробуйте заменить fab.hide() на fab.setVisibility(View.INVISIBLE) и fab.show() на fab.setVisibility(View.VISIBLE).

...