private boolean canScrollDown() { // Compatibility implementation of View#canScrollVertically final int offset = mRecyclerView.computeVerticalScrollOffset(); final int range = mRecyclerView.computeVerticalScrollRange() - mRecyclerView.computeVerticalScrollExtent(); return range != 0 && offset < range - 1; }
@Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (scrollBar != null) { int extent = recyclerView.computeVerticalScrollExtent(); int offset = recyclerView.computeVerticalScrollOffset(); int range = recyclerView.computeVerticalScrollRange(); scrollBar.onProgressRecyclerView(extent, offset, range,linearLayoutManager.findFirstVisibleItemPosition()==0); } }
@Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); if (header != null && isParallaxHeader) { translateView(recyclerView.computeVerticalScrollOffset(), header, false); } if (footer != null && isParallaxFooter) { int range = recyclerView.computeVerticalScrollRange(); int extend = recyclerView.computeVerticalScrollExtent(); int offset = recyclerView.computeVerticalScrollOffset(); translateView(range - (extend + offset), footer, true); } } });
/** * Informs the {@link #recyclerView} that we need to smoothly scroll * to the requested position. * * @param ratio The scroll location as a ratio of the total in the range [0, 1] */ protected void scrollToLocation(float ratio) { int scrollRange = recyclerView.computeVerticalScrollRange() - recyclerView.computeVerticalScrollExtent(); if (scrollRange > 0) { int deltaY = (int) (ratio * scrollRange) - recyclerView.computeVerticalScrollOffset(); recyclerView.scrollBy(0, deltaY); } }
data.put("ComputeHorizontalScrollOffset", rv.computeHorizontalScrollOffset()); data.put("ComputeHorizontalScrollRange", rv.computeHorizontalScrollRange()); data.put("ComputeVerticalScrollExtent", rv.computeVerticalScrollExtent()); data.put("ComputeVerticalScrollOffset", rv.computeVerticalScrollOffset()); data.put("ComputeVerticalScrollRange", rv.computeVerticalScrollRange());
private boolean reachBottom(View target) { if (target instanceof NestedScrollView) { NestedScrollView nestedScrollView = (NestedScrollView) target; int scrollY = nestedScrollView.getScrollY(); View onlyChild = nestedScrollView.getChildAt(0); if (onlyChild.getHeight() <= scrollY + nestedScrollView.getHeight()) { return true; } } else if (target instanceof RecyclerView) { RecyclerView recyclerView = (RecyclerView) target; if (recyclerView.computeVerticalScrollExtent() + recyclerView.computeVerticalScrollOffset() >= recyclerView.computeVerticalScrollRange()) { return true; } } return false; }
@Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { int verticalRange = recyclerView.computeVerticalScrollRange(); //Makes sure the FastScroll is correctly hidden on shorter lists if (hideOnShortLists && (verticalRange < calculatedMinDisplayHeight || calculatedMinDisplayHeight == 0)) { updateHandleVisibility(false); return; } //Makes sure the handle is shown when scrolling updateHandleVisibility(true); delayHandler.removeCallbacks(handleHideRunnable); if (handle.isSelected()) { return; } hideHandleDelayed(); float ratio = (float)recyclerView.computeVerticalScrollOffset() / (float) (verticalRange - recyclerView.computeVerticalScrollExtent()); float halfHandleHeight = (handle.getHeight() / 2); setBubbleAndHandlePosition((height - handle.getHeight()) * ratio + halfHandleHeight); } }