Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 975cfdd

Browse files
author
dinuscxj
committed
Multiple code improvements
1 parent 351a05e commit 975cfdd

File tree

2 files changed

+45
-81
lines changed

2 files changed

+45
-81
lines changed

library/src/main/java/app/dinus/com/loadingdrawable/render/circle/rotate/MaterialLoadingRenderer.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ public void onAnimationStart(Animator animation) {
7272
private float mOriginStartDegrees;
7373
private float mOriginRotationIncrement;
7474

75-
7675
public MaterialLoadingRenderer(Context context) {
7776
super(context);
7877
init();
@@ -194,14 +193,14 @@ private void setInsets(int width, int height) {
194193
}
195194

196195
private void storeOriginals() {
197-
mOriginStartDegrees = mStartDegrees;
198196
mOriginEndDegrees = mEndDegrees;
197+
mOriginStartDegrees = mStartDegrees;
199198
mOriginRotationIncrement = mRotationIncrement;
200199
}
201200

202201
private void resetOriginals() {
203-
mOriginStartDegrees = 0;
204202
mOriginEndDegrees = 0;
203+
mOriginStartDegrees = 0;
205204
mOriginRotationIncrement = 0;
206205

207206
mEndDegrees = 0;
@@ -215,10 +214,6 @@ private int getStartingColor() {
215214
return mColors[mColorIndex];
216215
}
217216

218-
private float getMinDegrees() {
219-
return (float) Math.toDegrees(getStrokeWidth() / (2 * Math.PI * getCenterRadius()));
220-
}
221-
222217
private void updateRingColor(float interpolatedTime) {
223218
if (interpolatedTime > COLOR_START_DELAY_OFFSET) {
224219
mCurrentColor = evaluateColorChange((interpolatedTime - COLOR_START_DELAY_OFFSET)

library/src/main/java/app/dinus/com/loadingdrawable/render/circle/rotate/WhorlLoadingRenderer.java

Lines changed: 43 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,18 @@
1818
public class WhorlLoadingRenderer extends LoadingRenderer {
1919
private static final Interpolator MATERIAL_INTERPOLATOR = new FastOutSlowInInterpolator();
2020

21-
private static final float FULL_ROTATION = 1080.0f;
22-
private static final float ROTATION_FACTOR = 0.25f;
23-
private static final float MAX_PROGRESS_ARC = 0.6f;
24-
25-
private static final float START_TRIM_DURATION_OFFSET = 0.5f;
26-
private static final float END_TRIM_DURATION_OFFSET = 1.0f;
27-
2821
private static final int DEGREE_180 = 180;
2922
private static final int DEGREE_360 = 360;
3023
private static final int NUM_POINTS = 5;
3124

25+
private static final float MIN_SWIPE_DEGREE = 0.1f;
26+
private static final float MAX_SWIPE_DEGREES = 0.6f * DEGREE_360;
27+
private static final float FULL_GROUP_ROTATION = 3.0f * DEGREE_360;
28+
private static final float MAX_ROTATION_INCREMENT = 0.25f * DEGREE_360;
29+
30+
private static final float START_TRIM_DURATION_OFFSET = 0.5f;
31+
private static final float END_TRIM_DURATION_OFFSET = 1.0f;
32+
3233
private static final int[] DEFAULT_COLORS = new int[]{
3334
Color.RED, Color.GREEN, Color.BLUE
3435
};
@@ -42,7 +43,7 @@ public void onAnimationRepeat(Animator animator) {
4243
super.onAnimationRepeat(animator);
4344
storeOriginals();
4445

45-
mStartTrim = mEndTrim;
46+
mStartDegrees = mEndDegrees;
4647
mRotationCount = (mRotationCount + 1) % (NUM_POINTS);
4748
}
4849

@@ -57,30 +58,34 @@ public void onAnimationStart(Animator animation) {
5758

5859
private float mStrokeInset;
5960

60-
private float mEndTrim;
61-
private float mRotation;
62-
private float mStartTrim;
6361
private float mRotationCount;
6462
private float mGroupRotation;
65-
private float mOriginEndTrim;
66-
private float mOriginRotation;
67-
private float mOriginStartTrim;
63+
64+
private float mEndDegrees;
65+
private float mStartDegrees;
66+
private float mSwipeDegrees;
67+
private float mRotationIncrement;
68+
private float mOriginEndDegrees;
69+
private float mOriginStartDegrees;
70+
private float mOriginRotationIncrement;
6871

6972
public WhorlLoadingRenderer(Context context) {
7073
super(context);
74+
init();
7175
setupPaint();
7276
addRenderListener(mAnimatorListener);
7377
}
7478

75-
private void setupPaint() {
79+
private void init() {
7680
mColors = DEFAULT_COLORS;
81+
setInsets((int) getWidth(), (int) getHeight());
82+
}
7783

84+
private void setupPaint() {
7885
mPaint.setAntiAlias(true);
7986
mPaint.setStrokeWidth(getStrokeWidth());
8087
mPaint.setStyle(Paint.Style.STROKE);
8188
mPaint.setStrokeCap(Paint.Cap.ROUND);
82-
83-
setInsets((int) getWidth(), (int) getHeight());
8489
}
8590

8691
@Override
@@ -92,18 +97,11 @@ public void draw(Canvas canvas, Rect bounds) {
9297
arcBounds.set(bounds);
9398
arcBounds.inset(mStrokeInset, mStrokeInset);
9499

95-
if (mStartTrim == mEndTrim) {
96-
mStartTrim = mEndTrim + getMinProgressArc();
97-
}
98-
99-
float startAngle = (mStartTrim + mRotation) * DEGREE_360;
100-
float endAngle = (mEndTrim + mRotation) * DEGREE_360;
101-
float sweepAngle = endAngle - startAngle;
102-
103100
for (int i = 0; i < mColors.length; i++) {
104101
mPaint.setStrokeWidth(getStrokeWidth() / (i + 1));
105102
mPaint.setColor(mColors[i]);
106-
canvas.drawArc(createArcBounds(arcBounds, i), startAngle + DEGREE_180 * (i % 2), sweepAngle, false, mPaint);
103+
canvas.drawArc(createArcBounds(arcBounds, i), mStartDegrees + DEGREE_180 * (i % 2),
104+
mSwipeDegrees, false, mPaint);
107105
}
108106

109107
canvas.restoreToCount(saveCount);
@@ -128,27 +126,26 @@ private RectF createArcBounds(RectF sourceArcBounds, int index) {
128126

129127
@Override
130128
public void computeRender(float renderProgress) {
131-
final float minProgressArc = getMinProgressArc();
132-
final float originEndTrim = mOriginEndTrim;
133-
final float originStartTrim = mOriginStartTrim;
134-
final float originRotation = mOriginRotation;
135-
136129
// Moving the start trim only occurs in the first 50% of a
137130
// single ring animation
138131
if (renderProgress <= START_TRIM_DURATION_OFFSET) {
139132
float startTrimProgress = (renderProgress) / (1.0f - START_TRIM_DURATION_OFFSET);
140-
mStartTrim = originStartTrim + ((MAX_PROGRESS_ARC - minProgressArc) * MATERIAL_INTERPOLATOR.getInterpolation(startTrimProgress));
133+
mStartDegrees = mOriginStartDegrees + MAX_SWIPE_DEGREES * MATERIAL_INTERPOLATOR.getInterpolation(startTrimProgress);
141134
}
142135

143136
// Moving the end trim starts after 50% of a single ring
144137
// animation completes
145138
if (renderProgress > START_TRIM_DURATION_OFFSET) {
146139
float endTrimProgress = (renderProgress - START_TRIM_DURATION_OFFSET) / (END_TRIM_DURATION_OFFSET - START_TRIM_DURATION_OFFSET);
147-
mEndTrim = originEndTrim + ((MAX_PROGRESS_ARC - minProgressArc) * MATERIAL_INTERPOLATOR.getInterpolation(endTrimProgress));
140+
mEndDegrees = mOriginEndDegrees + MAX_SWIPE_DEGREES * MATERIAL_INTERPOLATOR.getInterpolation(endTrimProgress);
148141
}
149142

150-
mGroupRotation = ((FULL_ROTATION / NUM_POINTS) * renderProgress) + (FULL_ROTATION * (mRotationCount / NUM_POINTS));
151-
mRotation = originRotation + (ROTATION_FACTOR * renderProgress);
143+
if (Math.abs(mEndDegrees - mStartDegrees) > MIN_SWIPE_DEGREE) {
144+
mSwipeDegrees = mEndDegrees - mStartDegrees;
145+
}
146+
147+
mGroupRotation = ((FULL_GROUP_ROTATION / NUM_POINTS) * renderProgress) + (FULL_GROUP_ROTATION * (mRotationCount / NUM_POINTS));
148+
mRotationIncrement = mOriginRotationIncrement + (MAX_ROTATION_INCREMENT * renderProgress);
152149

153150
invalidateSelf();
154151
}
@@ -180,33 +177,6 @@ public void setStrokeWidth(float strokeWidth) {
180177
invalidateSelf();
181178
}
182179

183-
public void setStartTrim(float startTrim) {
184-
mStartTrim = startTrim;
185-
invalidateSelf();
186-
}
187-
188-
public float getStartTrim() {
189-
return mStartTrim;
190-
}
191-
192-
public void setEndTrim(float endTrim) {
193-
mEndTrim = endTrim;
194-
invalidateSelf();
195-
}
196-
197-
public float getEndTrim() {
198-
return mEndTrim;
199-
}
200-
201-
public void setRotation(float rotation) {
202-
mRotation = rotation;
203-
invalidateSelf();
204-
}
205-
206-
public float getRotation() {
207-
return mRotation;
208-
}
209-
210180
public void setInsets(int width, int height) {
211181
final float minEdge = (float) Math.min(width, height);
212182
float insets;
@@ -219,21 +189,20 @@ public void setInsets(int width, int height) {
219189
}
220190

221191
private void storeOriginals() {
222-
mOriginStartTrim = mStartTrim;
223-
mOriginEndTrim = mEndTrim;
224-
mOriginRotation = mRotation;
192+
mOriginEndDegrees = mEndDegrees;
193+
mOriginStartDegrees = mStartDegrees;
194+
mOriginRotationIncrement = mRotationIncrement;
225195
}
226196

227197
private void resetOriginals() {
228-
mOriginStartTrim = 0;
229-
mOriginEndTrim = 0;
230-
mOriginRotation = 0;
231-
setStartTrim(0);
232-
setEndTrim(0);
233-
setRotation(0);
234-
}
198+
mOriginEndDegrees = 0;
199+
mOriginStartDegrees = 0;
200+
mOriginRotationIncrement = 0;
201+
202+
mEndDegrees = 0;
203+
mStartDegrees = 0;
204+
mRotationIncrement = 0;
235205

236-
private float getMinProgressArc() {
237-
return (float) Math.toRadians(getStrokeWidth() / (2 * Math.PI * getCenterRadius()));
206+
mSwipeDegrees = MIN_SWIPE_DEGREE;
238207
}
239208
}

0 commit comments

Comments
 (0)