Skip to content

Commit 228eef1

Browse files
Merge pull request #15 from darzul/master
Factorize positon computation + Removed ViewTreeObserver
2 parents 14147f3 + da2d83a commit 228eef1

File tree

1 file changed

+12
-21
lines changed

1 file changed

+12
-21
lines changed

Diff for: library/src/main/java/com/lb/recyclerview_fast_scroller/RecyclerViewFastScroller.java

+12-21
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import android.view.LayoutInflater;
1515
import android.view.MotionEvent;
1616
import android.view.View;
17-
import android.view.ViewTreeObserver;
1817
import android.widget.LinearLayout;
1918
import 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

Comments
 (0)