2017-05-04 116 views
3

如何限制垂直回收站的滾動能力只允許向下滾動?垂直回收站只允許向下滾動但阻止向上滾動

我想做一個「不返回頂部的列表」。

編輯:它不是重複的。我不想禁用垂直滾動。我只是想禁用向上滾動。

+0

據我所知,你可以做到這一點使用'onScrollChange'聽者'onScrollStateChanged'你得到垂直滾動的值,即'dy'它會讓你知道這是一個向上一扔一扔或向下。現在你知道這是一團糟,明確地使用'recyclerView.scrollToPosition(items.size() - 1)'將'recylerview'移動到底部;' –

回答

1

我想出了一個使用OnItemTouchListener的解決方案。

滾動事件由3個MotionEvents組成:ACTION_DOWN,ACTION_MOVEACTION_UP

所以在ACTION_DOWN我們得到了光標(Y)的垂直位置,並在ACTION_MOVE上比較了新位置和舊位置。

通過返回true,onInterceptTouchEvent()方法確保我們攔截滾動事件。

float lastY; 

recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { 
    @Override 
    public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent event) { 
     int action = event.getAction(); 
     if(action == MotionEvent.ACTION_DOWN) { 
      lastY = event.getY(); 
     } 
     if (action == MotionEvent.ACTION_MOVE && event.getY() > lastY) { 
      return true; 
     } 
     return false; 
    } 
    ... 
+0

感謝這個答案,我現在就試一試。 –

+0

這個答案有問題,如果我刷下來,但保持我的手指滑下,我也可以再次刷卡。 –