隐藏和显示后未显示浮动操作按钮图标图像

时间:2018-11-01 09:30:06

标签: java android floating-action-button

嗨,我正在使用Floating Action Button开发一个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 :(得分:2)

我知道您发布此消息已经很长时间了,但是我遇到了同样的问题。我通过在单击后对工厂执行hide()和show()来解决该问题。 (在我的特定情况下,我在onClick中更改了可绘制对象。在更改可绘制对象之后执行hide()和show()解决了该问题。)

您的代码应如下所示:

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();
            }
        });

答案 1 :(得分:2)

依赖项com.google.android.material:material:1.0.0遇到相同的问题。将版本升级到1.1.0-alpha3可以解决此问题。

答案 2 :(得分:1)

您的代码看起来不错。我认为,可能会导致该行为的唯一原因是您的onScrollChanged中的延迟处理程序。请转到全局FloatingActionButton fab的声明,并将其设置为static。看看是否有帮助。

PS:如果确实没有帮助,请尝试将fab.hide()替换为fab.setVisibility(View.INVISIBLE),将fab.show()替换为fab.setVisibility(View.VISIBLE)

答案 3 :(得分:0)

使用此

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

已插入

fab.show(); &&  fab.hide();

答案 4 :(得分:0)

我通过调用函数hide和在onCreateView中再次显示来解决它

fab.hide();
fab.show();