Skip to content

Commit 8ad09c8

Browse files
fixed orientation changes issues
1 parent 3aed368 commit 8ad09c8

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

library/src/main/java/com/lb/recyclerview_fast_scroller/RecyclerViewFastScroller.java

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,18 @@ public class RecyclerViewFastScroller extends LinearLayout {
2727
private int height;
2828
private boolean isInitialized = false;
2929
private ObjectAnimator currentAnimator = null;
30+
31+
private final RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
32+
@Override
33+
public void onScrolled(final RecyclerView recyclerView, final int dx, final int dy) {
34+
if (bubble == null || handle.isSelected())
35+
return;
36+
final int verticalScrollOffset = recyclerView.computeVerticalScrollOffset();
37+
final int verticalScrollRange = recyclerView.computeVerticalScrollRange();
38+
float proportion = (float) verticalScrollOffset / ((float) verticalScrollRange - height);
39+
setBubbleAndHandlePosition(height * proportion);
40+
}
41+
};
3042

3143
public interface BubbleTextGetter {
3244
String getTextToShowInBubble(int pos);
@@ -96,20 +108,28 @@ public boolean onTouchEvent(@NonNull MotionEvent event) {
96108
return super.onTouchEvent(event);
97109
}
98110

99-
public void setRecyclerView(RecyclerView recyclerView) {
111+
public void setRecyclerView(final RecyclerView recyclerView) {
100112
this.recyclerView = recyclerView;
101-
RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
113+
recyclerView.addOnScrollListener(onScrollListener);
114+
recyclerView.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
102115
@Override
103-
public void onScrolled(final RecyclerView recyclerView, final int dx, final int dy) {
116+
public boolean onPreDraw() {
117+
recyclerView.getViewTreeObserver().removeOnPreDrawListener(this);
104118
if (bubble == null || handle.isSelected())
105-
return;
119+
return true;
106120
final int verticalScrollOffset = recyclerView.computeVerticalScrollOffset();
107121
final int verticalScrollRange = recyclerView.computeVerticalScrollRange();
108122
float proportion = (float) verticalScrollOffset / ((float) verticalScrollRange - height);
109123
setBubbleAndHandlePosition(height * proportion);
124+
return true;
110125
}
111-
};
112-
recyclerView.addOnScrollListener(onScrollListener);
126+
});
127+
}
128+
129+
@Override
130+
protected void onDetachedFromWindow() {
131+
super.onDetachedFromWindow();
132+
recyclerView.removeOnScrollListener(onScrollListener);
113133
}
114134

115135
private void setRecyclerViewPosition(float y) {

0 commit comments

Comments
 (0)