|
|
@@ -5,8 +5,6 @@ import android.support.annotation.Nullable;
|
|
5
|
5
|
import android.view.MotionEvent;
|
|
6
|
6
|
import android.widget.ScrollView;
|
|
7
|
7
|
|
|
8
|
|
-import com.reactnativenavigation.utils.ViewUtils;
|
|
9
|
|
-
|
|
10
|
8
|
class CollapseCalculator {
|
|
11
|
9
|
private float collapse;
|
|
12
|
10
|
private MotionEvent previousTouchEvent;
|
|
|
@@ -18,16 +16,9 @@ class CollapseCalculator {
|
|
18
|
16
|
private boolean canExpend = false;
|
|
19
|
17
|
private CollapsingView view;
|
|
20
|
18
|
protected ScrollView scrollView;
|
|
21
|
|
- private static float finalCollapsedTranslation;
|
|
22
|
19
|
|
|
23
|
20
|
CollapseCalculator(final CollapsingView collapsingView) {
|
|
24
|
21
|
this.view = collapsingView;
|
|
25
|
|
- ViewUtils.runOnPreDraw(view.asView(), new Runnable() {
|
|
26
|
|
- @Override
|
|
27
|
|
- public void run() {
|
|
28
|
|
- finalCollapsedTranslation = view.getFinalCollapseValue();
|
|
29
|
|
- }
|
|
30
|
|
- });
|
|
31
|
22
|
}
|
|
32
|
23
|
|
|
33
|
24
|
void setScrollView(ScrollView scrollView) {
|
|
|
@@ -38,25 +29,24 @@ class CollapseCalculator {
|
|
38
|
29
|
CollapseAmount calculate(MotionEvent event) {
|
|
39
|
30
|
updateInitialTouchY(event);
|
|
40
|
31
|
if (!isMoveEvent(event)) {
|
|
41
|
|
- return CollapseAmount.NONE;
|
|
|
32
|
+ return CollapseAmount.None;
|
|
42
|
33
|
}
|
|
43
|
34
|
|
|
44
|
|
- if (shouldTranslateTopBarAndScrollView(event)) {
|
|
|
35
|
+ if (shouldCollapse(event)) {
|
|
45
|
36
|
return calculateCollapse(event);
|
|
46
|
37
|
} else {
|
|
47
|
38
|
previousCollapseY = -1;
|
|
48
|
39
|
previousTouchEvent = MotionEvent.obtain(event);
|
|
49
|
|
- return CollapseAmount.NONE;
|
|
|
40
|
+ return CollapseAmount.None;
|
|
50
|
41
|
}
|
|
51
|
42
|
}
|
|
52
|
43
|
|
|
53
|
|
- private boolean shouldTranslateTopBarAndScrollView(MotionEvent event) {
|
|
|
44
|
+ private boolean shouldCollapse(MotionEvent event) {
|
|
54
|
45
|
checkCollapseLimits();
|
|
55
|
46
|
ScrollDirection.Direction direction = getScrollDirection(event.getRawY());
|
|
56
|
|
- return isMoveEvent(event) &&
|
|
57
|
|
- (isNotCollapsedOrExpended() ||
|
|
|
47
|
+ return isNotCollapsedOrExpended() ||
|
|
58
|
48
|
(canCollapse && isExpendedAndScrollingUp(direction)) ||
|
|
59
|
|
- (canExpend && isCollapsedAndScrollingDown(direction)));
|
|
|
49
|
+ (canExpend && isCollapsedAndScrollingDown(direction));
|
|
60
|
50
|
}
|
|
61
|
51
|
|
|
62
|
52
|
private ScrollDirection.Direction getScrollDirection(float y) {
|
|
|
@@ -72,12 +62,12 @@ class CollapseCalculator {
|
|
72
|
62
|
}
|
|
73
|
63
|
|
|
74
|
64
|
private void checkCollapseLimits() {
|
|
75
|
|
- float currentTopBarTranslation = view.getCurrentCollapseValue();
|
|
|
65
|
+ float currentCollapse = view.getCurrentCollapseValue();
|
|
76
|
66
|
float finalExpendedTranslation = 0;
|
|
77
|
|
- isExpended = isExpended(currentTopBarTranslation, finalExpendedTranslation);
|
|
78
|
|
- isCollapsed = isCollapsed(currentTopBarTranslation, finalCollapsedTranslation);
|
|
79
|
|
- canCollapse = calculateCanCollapse(currentTopBarTranslation, finalExpendedTranslation, finalCollapsedTranslation);
|
|
80
|
|
- canExpend = calculateCanExpend(currentTopBarTranslation, finalExpendedTranslation, finalCollapsedTranslation);
|
|
|
67
|
+ isExpended = isExpended(currentCollapse, finalExpendedTranslation);
|
|
|
68
|
+ isCollapsed = isCollapsed(currentCollapse, view.getFinalCollapseValue());
|
|
|
69
|
+ canCollapse = calculateCanCollapse(currentCollapse, finalExpendedTranslation, view.getFinalCollapseValue());
|
|
|
70
|
+ canExpend = calculateCanExpend(currentCollapse, finalExpendedTranslation, view.getFinalCollapseValue());
|
|
81
|
71
|
}
|
|
82
|
72
|
|
|
83
|
73
|
private boolean calculateCanCollapse(float currentTopBarTranslation, float finalExpendedTranslation, float finalCollapsedTranslation) {
|
|
|
@@ -124,8 +114,8 @@ class CollapseCalculator {
|
|
124
|
114
|
|
|
125
|
115
|
private float calculateCollapse(float y) {
|
|
126
|
116
|
float translation = y - previousCollapseY + view.getCurrentCollapseValue();
|
|
127
|
|
- if (translation < finalCollapsedTranslation) {
|
|
128
|
|
- translation = finalCollapsedTranslation;
|
|
|
117
|
+ if (translation < view.getFinalCollapseValue()) {
|
|
|
118
|
+ translation = view.getFinalCollapseValue();
|
|
129
|
119
|
}
|
|
130
|
120
|
final float expendedTranslation = 0;
|
|
131
|
121
|
if (translation > expendedTranslation) {
|