2017-07-21 41 views
1

当用户滚动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); 
       } 
      } 
     }); 

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

回答

1

你可以尝试禁用项目漫画家

mRecyclerViewHome.setItemAnimator(null); 
+0

我试过了,还在抖。它像动乱一样震动,不像动画。 – Robin