0

I have a RecyclerView with Horizontal LinearLayoutManager. I would like to check ScrollListener. My goal is to check these steps:

  1. Check when RecyclerView start scroll
  2. Check when RecyclerView end scroll
  3. Check when RecyclerView's scroll is in center position

Here is a my RecyclerView code with LinearLayoutManager.

LinearLayoutManager horizontalManager = new LinearLayoutManager(context);
        horizontalManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        viewHolderStory.recyclerView.setLayoutManager(horizontalManager);
        viewHolderStory.recyclerView.addItemDecoration(new PaddingItemDecoration((Activity) context));
        viewHolderStory.recyclerView.setHasFixedSize(true);
        viewHolderStory.recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);

            }
        });
        viewHolderStory.recyclerView.setNestedScrollingEnabled(false);

Is any way to add validation on my addOnScrollListener method?

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
BekaKK
  • 2,173
  • 6
  • 42
  • 80

2 Answers2

0
 public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if(newState==RecyclerView.SCROLL_STATE_IDLE){
                    /// User Stops Scroll
                 }
                if(newState==RecyclerView.SCROLL_STATE_DRAGGING){
                 /// User Starts Scroll
              }
            }

You can find more from this.

Soham
  • 4,397
  • 11
  • 43
  • 71
0

You can compute this with computeVerticalScrollExtent() , computeVerticalScrollOffset() and computeVerticalScrollRange()

if your recyler view is horizontal, these functions have a horizontal counterpart

full code :

viewHolderStory.recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() 
{
    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        int extent = recyclerView.computeVerticalScrollExtent();
        int offset = recyclerView.computeVerticalScrollOffset();
        int range = recyclerView.computeVerticalScrollRange();

        if(offset == 0){
            //fire when recycler view hit top
            Log.i("myTag", "onScrolled: top");
        }
        else if(offset + extent == range){
            //fire when recycler view hit bottom
            Log.i("myTag", "onScrolled: bottom");
        }
        else {
            //fire the rest of the time
            Log.i("myTag", "onScrolled: middle");
        }
    }
});
Kilarn123
  • 723
  • 5
  • 6