16
16
import android .view .animation .LinearInterpolator ;
17
17
18
18
public class LevelLoadingRenderer extends LoadingRenderer {
19
+ private static final Interpolator LINEAR_INTERPOLATOR = new LinearInterpolator ();
19
20
private static final Interpolator MATERIAL_INTERPOLATOR = new FastOutSlowInInterpolator ();
20
21
private static final Interpolator ACCELERATE_INTERPOLATOR = new AccelerateInterpolator ();
21
- private static final Interpolator LINEAR_INTERPOLATOR = new LinearInterpolator ();
22
22
private static final Interpolator DECELERATE_INTERPOLATOR = new DecelerateInterpolator ();
23
23
24
- private static final float START_TRIM_DURATION_OFFSET = 0.5f ;
25
- private static final float END_TRIM_START_DELAY_OFFSET = 0.5f ;
24
+ private static final int NUM_POINTS = 5 ;
25
+ private static final int DEGREE_360 = 360 ;
26
26
27
- private static final float NUM_POINTS = 5f ;
28
27
private static final float FULL_ROTATION = 1080.0f ;
28
+ private static final float ROTATION_FACTOR = 0.25f ;
29
29
private static final float MAX_PROGRESS_ARC = 0.8f ;
30
+ private static final float LEVEL2_SWEEP_ANGLE_OFFSET = 7.0f / 8.0f ;
31
+ private static final float LEVEL3_SWEEP_ANGLE_OFFSET = 5.0f / 8.0f ;
32
+ private static final float START_TRIM_DURATION_OFFSET = 0.5f ;
33
+ private static final float END_TRIM_START_DELAY_OFFSET = 0.5f ;
30
34
31
35
private static final int DEFAULT_COLOR = Color .WHITE ;
32
36
@@ -50,21 +54,19 @@ public void onAnimationStart(Animator animation) {
50
54
}
51
55
};
52
56
53
- private float mStrokeInset = 2.5f ;
54
-
55
- private float mEndTrim = 0.0f ;
56
- private float mRotation = 0.0f ;
57
- private float mStartTrim = 0.0f ;
58
-
59
57
private boolean mIsRenderingFirstHalf ;
60
58
61
- private int mBottomColor ;
62
- private int mMiddleColor ;
63
- private int mTopColor ;
59
+ private int mLevel1Color ;
60
+ private int mLevel2Color ;
61
+ private int mLevel3Color ;
64
62
63
+ private float mStrokeInset ;
64
+
65
+ private float mEndTrim ;
66
+ private float mRotation ;
67
+ private float mStartTrim ;
65
68
private float mRotationCount ;
66
69
private float mGroupRotation ;
67
-
68
70
private float mOriginEndTrim ;
69
71
private float mOriginRotation ;
70
72
private float mOriginStartTrim ;
@@ -76,9 +78,9 @@ public LevelLoadingRenderer(Context context) {
76
78
}
77
79
78
80
private void setupPaint () {
79
- mBottomColor = oneThirdAlphaColor (DEFAULT_COLOR );
80
- mMiddleColor = twoThirdAlphaColor (DEFAULT_COLOR );
81
- mTopColor = DEFAULT_COLOR ;
81
+ mLevel1Color = oneThirdAlphaColor (DEFAULT_COLOR );
82
+ mLevel2Color = twoThirdAlphaColor (DEFAULT_COLOR );
83
+ mLevel3Color = DEFAULT_COLOR ;
82
84
83
85
mPaint .setAntiAlias (true );
84
86
mPaint .setStrokeWidth (getStrokeWidth ());
@@ -97,47 +99,47 @@ public void draw(Canvas canvas, Rect bounds) {
97
99
arcBounds .set (bounds );
98
100
arcBounds .inset (mStrokeInset , mStrokeInset );
99
101
100
- float startAngle = (mStartTrim + mRotation ) * 360 ;
101
- float endAngle = (mEndTrim + mRotation ) * 360 ;
102
- float sweepAngle = endAngle - startAngle ;
103
-
104
- if (sweepAngle == 0 ) {
105
- return ;
102
+ if (mStartTrim == mEndTrim ) {
103
+ mStartTrim = mEndTrim + getMinProgressArc ();
106
104
}
107
105
106
+ float startAngle = (mStartTrim + mRotation ) * DEGREE_360 ;
107
+ float endAngle = (mEndTrim + mRotation ) * DEGREE_360 ;
108
+ float sweepAngle = endAngle - startAngle ;
109
+
108
110
if (mIsRenderingFirstHalf ) {
109
111
float renderPercentage = Math .abs (mStartTrim - mEndTrim ) / MAX_PROGRESS_ARC ;
110
112
111
113
float topIncrement = DECELERATE_INTERPOLATOR .getInterpolation (renderPercentage ) - LINEAR_INTERPOLATOR .getInterpolation (renderPercentage );
112
114
float bottomIncrement = ACCELERATE_INTERPOLATOR .getInterpolation (renderPercentage ) - LINEAR_INTERPOLATOR .getInterpolation (renderPercentage );
113
115
114
- mPaint .setColor (mBottomColor );
116
+ mPaint .setColor (mLevel1Color );
115
117
canvas .drawArc (arcBounds , endAngle , -sweepAngle * (1 + topIncrement ), false , mPaint );
116
- mPaint .setColor (mMiddleColor );
117
- canvas .drawArc (arcBounds , endAngle , -sweepAngle * 7.0f / 8.0f , false , mPaint );
118
- mPaint .setColor (mTopColor );
119
- canvas .drawArc (arcBounds , endAngle , -sweepAngle * 5.0f / 8.0f * (1 + bottomIncrement ), false , mPaint );
118
+ mPaint .setColor (mLevel2Color );
119
+ canvas .drawArc (arcBounds , endAngle , -sweepAngle * LEVEL2_SWEEP_ANGLE_OFFSET , false , mPaint );
120
+ mPaint .setColor (mLevel3Color );
121
+ canvas .drawArc (arcBounds , endAngle , -sweepAngle * LEVEL3_SWEEP_ANGLE_OFFSET * (1 + bottomIncrement ), false , mPaint );
120
122
} else {
121
123
float renderPercentage = Math .abs (mStartTrim - mEndTrim ) / MAX_PROGRESS_ARC ;
122
- float totalSweepAngle = MAX_PROGRESS_ARC * 360 ;
124
+ float totalSweepAngle = MAX_PROGRESS_ARC * DEGREE_360 ;
123
125
124
- if (renderPercentage > 7.0f / 8.0f ) {
125
- mPaint .setColor (mBottomColor );
126
+ if (renderPercentage > LEVEL2_SWEEP_ANGLE_OFFSET ) {
127
+ mPaint .setColor (mLevel1Color );
126
128
canvas .drawArc (arcBounds , endAngle , -sweepAngle , false , mPaint );
127
129
128
- mPaint .setColor (mMiddleColor );
129
- canvas .drawArc (arcBounds , endAngle , totalSweepAngle * 7.0f / 8.0f , false , mPaint );
130
+ mPaint .setColor (mLevel2Color );
131
+ canvas .drawArc (arcBounds , endAngle , totalSweepAngle * LEVEL2_SWEEP_ANGLE_OFFSET , false , mPaint );
130
132
131
- mPaint .setColor (mTopColor );
132
- canvas .drawArc (arcBounds , endAngle , totalSweepAngle * 5.0f / 8.0f , false , mPaint );
133
- } else if (renderPercentage > 5.0f / 8.0f ) {
134
- mPaint .setColor (mMiddleColor );
133
+ mPaint .setColor (mLevel3Color );
134
+ canvas .drawArc (arcBounds , endAngle , totalSweepAngle * LEVEL3_SWEEP_ANGLE_OFFSET , false , mPaint );
135
+ } else if (renderPercentage > LEVEL3_SWEEP_ANGLE_OFFSET ) {
136
+ mPaint .setColor (mLevel2Color );
135
137
canvas .drawArc (arcBounds , endAngle , -sweepAngle , false , mPaint );
136
138
137
- mPaint .setColor (mTopColor );
138
- canvas .drawArc (arcBounds , endAngle , totalSweepAngle * 5.0f / 8.0f , false , mPaint );
139
+ mPaint .setColor (mLevel3Color );
140
+ canvas .drawArc (arcBounds , endAngle , totalSweepAngle * LEVEL3_SWEEP_ANGLE_OFFSET , false , mPaint );
139
141
} else {
140
- mPaint .setColor (mTopColor );
142
+ mPaint .setColor (mLevel3Color );
141
143
canvas .drawArc (arcBounds , endAngle , -sweepAngle , false , mPaint );
142
144
}
143
145
}
@@ -170,9 +172,8 @@ public void computeRender(float renderProgress) {
170
172
mIsRenderingFirstHalf = false ;
171
173
}
172
174
173
- mRotation = originRotation + (0.25f * renderProgress );
174
-
175
175
mGroupRotation = ((FULL_ROTATION / NUM_POINTS ) * renderProgress ) + (FULL_ROTATION * (mRotationCount / NUM_POINTS ));
176
+ mRotation = originRotation + (ROTATION_FACTOR * renderProgress );
176
177
177
178
invalidateSelf ();
178
179
}
@@ -195,9 +196,9 @@ public void reset() {
195
196
}
196
197
197
198
public void setColor (int color ) {
198
- mBottomColor = oneThirdAlphaColor (color );
199
- mMiddleColor = twoThirdAlphaColor (color );
200
- mTopColor = color ;
199
+ mLevel1Color = oneThirdAlphaColor (color );
200
+ mLevel2Color = twoThirdAlphaColor (color );
201
+ mLevel3Color = color ;
201
202
}
202
203
203
204
@ Override
0 commit comments