14
14
import android .view .LayoutInflater ;
15
15
import android .view .MotionEvent ;
16
16
import android .view .View ;
17
- import android .view .ViewTreeObserver ;
18
17
import android .widget .LinearLayout ;
19
18
import android .widget .TextView ;
20
19
@@ -32,12 +31,7 @@ public class RecyclerViewFastScroller extends LinearLayout {
32
31
private final RecyclerView .OnScrollListener onScrollListener = new RecyclerView .OnScrollListener () {
33
32
@ Override
34
33
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 ();
41
35
}
42
36
};
43
37
@@ -81,6 +75,7 @@ public void setViewsToUse(@LayoutRes int layoutResId, @IdRes int bubbleResId, @I
81
75
protected void onSizeChanged (int w , int h , int oldw , int oldh ) {
82
76
super .onSizeChanged (w , h , oldw , oldh );
83
77
height = h ;
78
+ updateBubbleAndHandlePosition ();
84
79
}
85
80
86
81
@ Override
@@ -118,20 +113,6 @@ public void setRecyclerView(final RecyclerView recyclerView) {
118
113
return ;
119
114
recyclerView .addOnScrollListener (onScrollListener );
120
115
}
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
- });
135
116
}
136
117
137
118
@ Override
@@ -166,6 +147,16 @@ private int getValueInRange(int min, int max, int value) {
166
147
return Math .min (minimum , max );
167
148
}
168
149
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
+
169
160
private void setBubbleAndHandlePosition (float y ) {
170
161
final int handleHeight = handle .getHeight ();
171
162
handle .setY (getValueInRange (0 , height - handleHeight , (int ) (y - handleHeight / 2 )));
0 commit comments