滚动时如何避免回收视图抖动?

时间:2017-07-21 02:54:22

标签: android scroll android-recyclerview

当用户滚动recyclerview时,我想在向上滚动时显示back_to_top按钮,在向上滚动时显示load_more按钮,在到达列表末尾时显示。 OnScrollListener如下:

mRecyclerViewHome.addOnScrollListener(new OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);

                int visibleItemCount = layoutManager.getChildCount();
                int totalItemCount = layoutManager.getItemCount();
                int pastVisibleItems = layoutManager.findFirstVisibleItemPosition();
                if (pastVisibleItems + visibleItemCount >= totalItemCount) {
                    mButtonLoadMore.setVisibility(View.VISIBLE);
                    Log.i(TAG, "reach bottom detected");
                }

                // TODO: 7/20/2017 remove shaking
                if (dy < 0) { // scrolling up
                    mButtonLoadMore.setVisibility(GONE);
                    mButtonToTop.setVisibility(VISIBLE);
                }

                if (dy > 0) {
                    mButtonToTop.setVisibility(GONE);
                }
            }
        });

此代码有效。但问题是,如果在recyclelerview滚动并且尚未停止时,我打断并触摸屏幕并执行另一个滚动手势,可能是回收视图的视图在移动时抖动。我想这是因为我在代码中使用dy参数,以便它继续跟踪dy的值并导致视图抖动?无论如何都要避免这种震动,同时检测用户是否向上或向下滚动?

1 个答案:

答案 0 :(得分:1)

你可以尝试禁用项目动画师

mRecyclerViewHome.setItemAnimator(null);