diff --git a/recyclerviewfastscroller/src/main/java/xyz/danoz/recyclerviewfastscroller/AbsRecyclerViewFastScroller.java b/recyclerviewfastscroller/src/main/java/xyz/danoz/recyclerviewfastscroller/AbsRecyclerViewFastScroller.java index 5b88dfc..5988a83 100644 --- a/recyclerviewfastscroller/src/main/java/xyz/danoz/recyclerviewfastscroller/AbsRecyclerViewFastScroller.java +++ b/recyclerviewfastscroller/src/main/java/xyz/danoz/recyclerviewfastscroller/AbsRecyclerViewFastScroller.java @@ -198,9 +198,7 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) { protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); - if (getScrollProgressCalculator() == null) { - onCreateScrollProgressCalculator(); - } + onCreateScrollProgressCalculator(); // synchronize the handle position to the RecyclerView float scrollProgress = getScrollProgressCalculator().calculateScrollProgress(mRecyclerView); diff --git a/recyclerviewfastscroller/src/main/java/xyz/danoz/recyclerviewfastscroller/calculation/VerticalScrollBoundsProvider.java b/recyclerviewfastscroller/src/main/java/xyz/danoz/recyclerviewfastscroller/calculation/VerticalScrollBoundsProvider.java index cffb665..12edd37 100644 --- a/recyclerviewfastscroller/src/main/java/xyz/danoz/recyclerviewfastscroller/calculation/VerticalScrollBoundsProvider.java +++ b/recyclerviewfastscroller/src/main/java/xyz/danoz/recyclerviewfastscroller/calculation/VerticalScrollBoundsProvider.java @@ -5,8 +5,8 @@ */ public class VerticalScrollBoundsProvider { - private final float mMinimumScrollY; - private final float mMaximumScrollY; + private float mMinimumScrollY; + private float mMaximumScrollY; public VerticalScrollBoundsProvider(float minimumScrollY, float maximumScrollY) { mMinimumScrollY = minimumScrollY; @@ -20,4 +20,9 @@ public float getMinimumScrollY() { public float getMaximumScrollY() { return mMaximumScrollY; } + + public void update(float minimumScrollY, float maximumScrollY) { + mMinimumScrollY = minimumScrollY; + mMaximumScrollY = maximumScrollY; + } } diff --git a/recyclerviewfastscroller/src/main/java/xyz/danoz/recyclerviewfastscroller/vertical/VerticalRecyclerViewFastScroller.java b/recyclerviewfastscroller/src/main/java/xyz/danoz/recyclerviewfastscroller/vertical/VerticalRecyclerViewFastScroller.java index 511ac08..6f02f08 100644 --- a/recyclerviewfastscroller/src/main/java/xyz/danoz/recyclerviewfastscroller/vertical/VerticalRecyclerViewFastScroller.java +++ b/recyclerviewfastscroller/src/main/java/xyz/danoz/recyclerviewfastscroller/vertical/VerticalRecyclerViewFastScroller.java @@ -1,6 +1,7 @@ package xyz.danoz.recyclerviewfastscroller.vertical; import android.content.Context; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -21,8 +22,9 @@ */ public class VerticalRecyclerViewFastScroller extends AbsRecyclerViewFastScroller implements RecyclerViewScroller { - @Nullable private VerticalScrollProgressCalculator mScrollProgressCalculator; - @Nullable private VerticalScreenPositionCalculator mScreenPositionCalculator; + private VerticalScrollProgressCalculator mScrollProgressCalculator; + private VerticalScreenPositionCalculator mScreenPositionCalculator; + private VerticalScrollBoundsProvider boundsProvider; public VerticalRecyclerViewFastScroller(Context context) { this(context, null); @@ -34,6 +36,13 @@ public VerticalRecyclerViewFastScroller(Context context, AttributeSet attrs) { public VerticalRecyclerViewFastScroller(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + boundsProvider = new VerticalScrollBoundsProvider(mBar.getY(), mBar.getY() + mBar.getHeight() - mHandle.getHeight()); + mScrollProgressCalculator = new VerticalLinearLayoutManagerScrollProgressCalculator(boundsProvider); + mScreenPositionCalculator = new VerticalScreenPositionCalculator(boundsProvider); } @Override @@ -55,10 +64,8 @@ public void moveHandleToPosition(float scrollProgress) { mHandle.setY(mScreenPositionCalculator.getYPositionFromScrollProgress(scrollProgress)); } + @Override protected void onCreateScrollProgressCalculator() { - VerticalScrollBoundsProvider boundsProvider = - new VerticalScrollBoundsProvider(mBar.getY(), mBar.getY() + mBar.getHeight() - mHandle.getHeight()); - mScrollProgressCalculator = new VerticalLinearLayoutManagerScrollProgressCalculator(boundsProvider); - mScreenPositionCalculator = new VerticalScreenPositionCalculator(boundsProvider); + boundsProvider.update(mBar.getY(), mBar.getY() + mBar.getHeight() - mHandle.getHeight()); } }