1414import android .view .LayoutInflater ;
1515import android .view .MotionEvent ;
1616import android .view .View ;
17- import android .view .ViewTreeObserver ;
1817import android .widget .LinearLayout ;
1918import android .widget .TextView ;
2019
@@ -32,12 +31,7 @@ public class RecyclerViewFastScroller extends LinearLayout {
3231 private final RecyclerView .OnScrollListener onScrollListener = new RecyclerView .OnScrollListener () {
3332 @ Override
3433 public void onScrolled (final RecyclerView recyclerView , final int dx , final int dy ) {
35- if (bubble == null || handle .isSelected ())
36- return ;
37- final int verticalScrollOffset = recyclerView .computeVerticalScrollOffset ();
38- final int verticalScrollRange = recyclerView .computeVerticalScrollRange ();
39- float proportion = (float ) verticalScrollOffset / ((float ) verticalScrollRange - height );
40- setBubbleAndHandlePosition (height * proportion );
34+ updateBubbleAndHandlePosition ();
4135 }
4236 };
4337
@@ -81,6 +75,7 @@ public void setViewsToUse(@LayoutRes int layoutResId, @IdRes int bubbleResId, @I
8175 protected void onSizeChanged (int w , int h , int oldw , int oldh ) {
8276 super .onSizeChanged (w , h , oldw , oldh );
8377 height = h ;
78+ updateBubbleAndHandlePosition ();
8479 }
8580
8681 @ Override
@@ -118,20 +113,6 @@ public void setRecyclerView(final RecyclerView recyclerView) {
118113 return ;
119114 recyclerView .addOnScrollListener (onScrollListener );
120115 }
121- if (recyclerView != null )
122- recyclerView .getViewTreeObserver ().addOnPreDrawListener (new ViewTreeObserver .OnPreDrawListener () {
123- @ Override
124- public boolean onPreDraw () {
125- recyclerView .getViewTreeObserver ().removeOnPreDrawListener (this );
126- if (bubble == null || handle .isSelected ())
127- return true ;
128- final int verticalScrollOffset = recyclerView .computeVerticalScrollOffset ();
129- final int verticalScrollRange = recyclerView .computeVerticalScrollRange ();
130- float proportion = (float ) verticalScrollOffset / ((float ) verticalScrollRange - height );
131- setBubbleAndHandlePosition (height * proportion );
132- return true ;
133- }
134- });
135116 }
136117
137118 @ Override
@@ -166,6 +147,16 @@ private int getValueInRange(int min, int max, int value) {
166147 return Math .min (minimum , max );
167148 }
168149
150+ private void updateBubbleAndHandlePosition () {
151+ if (bubble == null || handle .isSelected ())
152+ return ;
153+
154+ final int verticalScrollOffset = recyclerView .computeVerticalScrollOffset ();
155+ final int verticalScrollRange = recyclerView .computeVerticalScrollRange ();
156+ float proportion = (float ) verticalScrollOffset / ((float ) verticalScrollRange - height );
157+ setBubbleAndHandlePosition (height * proportion );
158+ }
159+
169160 private void setBubbleAndHandlePosition (float y ) {
170161 final int handleHeight = handle .getHeight ();
171162 handle .setY (getValueInRange (0 , height - handleHeight , (int ) (y - handleHeight / 2 )));
0 commit comments