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

Skip to content

Commit 5083613

Browse files
author
dinuscxj
committed
optimize code
1 parent c17376a commit 5083613

21 files changed

+2014
-2054
lines changed

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11

2-
## LoadingDrawable
2+
## LoadingDrawable: Android cool animation collection
33
[中文版文档](https://github.com/dinuscxj/LoadingDrawable/blob/master/README-ZH.md)   
44
[前言](http://www.jianshu.com/p/6e0ac5af4e8b)   
55
[Circle系列源码解析](http://www.jianshu.com/p/1c3c6fc1b7ff)   
66
[Fish源码解析](http://blog.csdn.net/XSF50717/article/details/51494266)<br/>
77
[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-LoadingDrawable-brightgreen.svg?style=flat)](http://android-arsenal.com/details/1/3450)
88

99
Some android loading drawable, can be combined with any View as the loading View and Progressbar,
10-
and is especially suitable for the loading animation of the [RecyclerRefreshLayout](https://github.com/dinuscxj/RecyclerRefreshLayout).<br/>
1110

1211
This project idea is from the [link] (http://mp.weixin.qq.com/s?__biz=MjM5MDMxOTE5NA==&mid=402703079&idx=2&sn=2fcc6746a866dcc003c68ead9b68e595&scene=2&srcid=0302A7p723KK8E5gSzLKb2ZL&from=timeline&isappinstalled=0#wechat_redirect).<br/>
1312
Perhaps you prefer to use gif way to achieve : [GifLoadingView] (https://github.com/Rogero0o/GifLoadingView). <br/>
@@ -31,7 +30,7 @@
3130

3231
#### Animal
3332
* FishLoadingRenderer
34-
* GhostsLoadingEyeRenderer
33+
* GhostsEyeLoadingEyeRenderer
3534

3635
#### Scenery
3736
* DayNightLoadingRenderer

app/src/main/res/layout/activity_main.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,4 @@
5353
android:text="CircleJumpActivity"
5454
android:textAllCaps="false" />
5555

56-
<app.dinus.com.loadingdrawable.LoadingView
57-
app:loading_renderer="MaterialLoadingRenderer"
58-
android:layout_width="50dp"
59-
android:layout_height="50dp" />
6056
</LinearLayout>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package app.dinus.com.loadingdrawable;
2+
3+
import android.content.Context;
4+
5+
public class DensityUtil {
6+
7+
public static float dip2px(Context context, float dpValue) {
8+
float scale = context.getResources().getDisplayMetrics().density;
9+
return dpValue * scale;
10+
}
11+
}

library/src/main/java/app/dinus/com/loadingdrawable/LoadingDrawable.java

Lines changed: 59 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -9,72 +9,72 @@
99
import app.dinus.com.loadingdrawable.render.LoadingRenderer;
1010

1111
public class LoadingDrawable extends Drawable implements Animatable {
12-
private LoadingRenderer mLoadingRender;
12+
private LoadingRenderer mLoadingRender;
13+
14+
private final Callback mCallback = new Callback() {
15+
@Override
16+
public void invalidateDrawable(Drawable d) {
17+
invalidateSelf();
18+
}
19+
20+
@Override
21+
public void scheduleDrawable(Drawable d, Runnable what, long when) {
22+
scheduleSelf(what, when);
23+
}
24+
25+
@Override
26+
public void unscheduleDrawable(Drawable d, Runnable what) {
27+
unscheduleSelf(what);
28+
}
29+
};
30+
31+
public LoadingDrawable(LoadingRenderer loadingRender) {
32+
this.mLoadingRender = loadingRender;
33+
this.mLoadingRender.setCallback(mCallback);
34+
}
35+
36+
@Override
37+
public void draw(Canvas canvas) {
38+
mLoadingRender.draw(canvas, getBounds());
39+
}
40+
41+
@Override
42+
public void setAlpha(int alpha) {
43+
mLoadingRender.setAlpha(alpha);
44+
}
45+
46+
@Override
47+
public void setColorFilter(ColorFilter cf) {
48+
mLoadingRender.setColorFilter(cf);
49+
}
50+
51+
@Override
52+
public int getOpacity() {
53+
return PixelFormat.TRANSLUCENT;
54+
}
55+
56+
@Override
57+
public void start() {
58+
mLoadingRender.start();
59+
}
60+
61+
@Override
62+
public void stop() {
63+
mLoadingRender.stop();
64+
}
1365

14-
private final Callback mCallback = new Callback() {
1566
@Override
16-
public void invalidateDrawable(Drawable d) {
17-
invalidateSelf();
67+
public boolean isRunning() {
68+
return mLoadingRender.isRunning();
1869
}
1970

2071
@Override
21-
public void scheduleDrawable(Drawable d, Runnable what, long when) {
22-
scheduleSelf(what, when);
72+
public int getIntrinsicHeight() {
73+
return (int) mLoadingRender.getHeight();
2374
}
2475

2576
@Override
26-
public void unscheduleDrawable(Drawable d, Runnable what) {
27-
unscheduleSelf(what);
77+
public int getIntrinsicWidth() {
78+
return (int) mLoadingRender.getWidth();
2879
}
29-
};
30-
31-
public LoadingDrawable(LoadingRenderer loadingRender) {
32-
this.mLoadingRender = loadingRender;
33-
this.mLoadingRender.setCallback(mCallback);
34-
}
35-
36-
@Override
37-
public void draw(Canvas canvas) {
38-
mLoadingRender.draw(canvas, getBounds());
39-
}
40-
41-
@Override
42-
public void setAlpha(int alpha) {
43-
mLoadingRender.setAlpha(alpha);
44-
}
45-
46-
@Override
47-
public void setColorFilter(ColorFilter cf) {
48-
mLoadingRender.setColorFilter(cf);
49-
}
50-
51-
@Override
52-
public int getOpacity() {
53-
return PixelFormat.TRANSLUCENT;
54-
}
55-
56-
@Override
57-
public void start() {
58-
mLoadingRender.start();
59-
}
60-
61-
@Override
62-
public void stop() {
63-
mLoadingRender.stop();
64-
}
65-
66-
@Override
67-
public boolean isRunning() {
68-
return mLoadingRender.isRunning();
69-
}
70-
71-
@Override
72-
public int getIntrinsicHeight() {
73-
return (int) mLoadingRender.getHeight();
74-
}
75-
76-
@Override
77-
public int getIntrinsicWidth() {
78-
return (int) mLoadingRender.getWidth();
79-
}
8080
}

library/src/main/java/app/dinus/com/loadingdrawable/render/LoadingRenderer.java

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,14 @@
1212
import android.view.animation.Interpolator;
1313
import android.view.animation.LinearInterpolator;
1414

15+
import app.dinus.com.loadingdrawable.DensityUtil;
16+
1517
public abstract class LoadingRenderer {
1618
private static final long ANIMATION_DURATION = 1333;
17-
1819
private static final float DEFAULT_SIZE = 56.0f;
19-
private static final float DEFAULT_CENTER_RADIUS = 12.5f;
20-
private static final float DEFAULT_STROKE_WIDTH = 2.5f;
2120

2221
protected float mWidth;
2322
protected float mHeight;
24-
protected float mStrokeWidth;
25-
protected float mCenterRadius;
2623

2724
private long mDuration;
2825
private Drawable.Callback mCallback;
@@ -66,13 +63,8 @@ protected void invalidateSelf() {
6663
}
6764

6865
private void setupDefaultParams(Context context) {
69-
final DisplayMetrics metrics = context.getResources().getDisplayMetrics();
70-
final float screenDensity = metrics.density;
71-
72-
mWidth = DEFAULT_SIZE * screenDensity;
73-
mHeight = DEFAULT_SIZE * screenDensity;
74-
mStrokeWidth = DEFAULT_STROKE_WIDTH * screenDensity;
75-
mCenterRadius = DEFAULT_CENTER_RADIUS * screenDensity;
66+
mWidth = DensityUtil.dip2px(context, DEFAULT_SIZE);
67+
mHeight = DensityUtil.dip2px(context, DEFAULT_SIZE);
7668

7769
mDuration = ANIMATION_DURATION;
7870
}
@@ -97,22 +89,6 @@ protected void addRenderListener(Animator.AnimatorListener animatorListener) {
9789
mRenderAnimator.addListener(animatorListener);
9890
}
9991

100-
public void setCenterRadius(float centerRadius) {
101-
mCenterRadius = centerRadius;
102-
}
103-
104-
public float getCenterRadius() {
105-
return mCenterRadius;
106-
}
107-
108-
public void setStrokeWidth(float strokeWidth) {
109-
mStrokeWidth = strokeWidth;
110-
}
111-
112-
public float getStrokeWidth() {
113-
return mStrokeWidth;
114-
}
115-
11692
public float getWidth() {
11793
return mWidth;
11894
}

library/src/main/java/app/dinus/com/loadingdrawable/render/animal/FishLoadingRenderer.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import android.util.DisplayMetrics;
1616
import android.view.animation.Interpolator;
1717

18+
import app.dinus.com.loadingdrawable.DensityUtil;
1819
import app.dinus.com.loadingdrawable.render.LoadingRenderer;
1920

2021
public class FishLoadingRenderer extends LoadingRenderer {
@@ -31,13 +32,13 @@ public class FishLoadingRenderer extends LoadingRenderer {
3132

3233
private static final float DEFAULT_WIDTH = 200.0f;
3334
private static final float DEFAULT_HEIGHT = 150.0f;
34-
private static final float DEFAULT_STROKE_WIDTH = DEFAULT_PATH_FULL_LINE_SIZE;
35+
private static final float DEFAULT_RIVER_BANK_WIDTH = DEFAULT_PATH_FULL_LINE_SIZE;
3536

3637
private static final long ANIMATION_DURATION = 800;
3738
private static final float DOTTED_LINE_WIDTH_COUNT = (8.5f + 5.5f - 2.0f) * 2.0f * 2.0f;
3839
private static final float DOTTED_LINE_WIDTH_RATE = 1.0f / DOTTED_LINE_WIDTH_COUNT;
3940

40-
private final float[] FISH_MOVE_POINTS = new float[] {
41+
private final float[] FISH_MOVE_POINTS = new float[]{
4142
DOTTED_LINE_WIDTH_RATE * 3.0f, DOTTED_LINE_WIDTH_RATE * 6.0f,
4243
DOTTED_LINE_WIDTH_RATE * 15f, DOTTED_LINE_WIDTH_RATE * 18f,
4344
DOTTED_LINE_WIDTH_RATE * 27.0f, DOTTED_LINE_WIDTH_RATE * 30.0f,
@@ -58,6 +59,7 @@ public class FishLoadingRenderer extends LoadingRenderer {
5859

5960
private float mFishRotateDegrees;
6061

62+
private float mRiverBankWidth;
6163
private float mRiverWidth;
6264
private float mRiverHeight;
6365
private float mFishWidth;
@@ -75,20 +77,17 @@ public FishLoadingRenderer(Context context) {
7577
}
7678

7779
private void init(Context context) {
78-
final DisplayMetrics metrics = context.getResources().getDisplayMetrics();
79-
final float screenDensity = metrics.density;
80-
81-
mWidth = DEFAULT_WIDTH * screenDensity;
82-
mHeight = DEFAULT_HEIGHT * screenDensity;
83-
mStrokeWidth = DEFAULT_STROKE_WIDTH * screenDensity;
84-
85-
mPathFullLineSize = DEFAULT_PATH_FULL_LINE_SIZE * screenDensity;
86-
mPathDottedLineSize = DEFAULT_PATH_DOTTED_LINE_SIZE * screenDensity;
87-
mFishWidth = DEFAULT_FISH_WIDTH * screenDensity;
88-
mFishHeight = DEFAULT_FISH_HEIGHT * screenDensity;
89-
mFishEyeSize = DEFAULT_FISH_EYE_SIZE * screenDensity;
90-
mRiverWidth = DEFAULT_RIVER_WIDTH * screenDensity;
91-
mRiverHeight = DEFAULT_RIVER_HEIGHT * screenDensity;
80+
mWidth = DensityUtil.dip2px(context, DEFAULT_WIDTH);
81+
mHeight = DensityUtil.dip2px(context, DEFAULT_HEIGHT);
82+
mRiverBankWidth = DensityUtil.dip2px(context, DEFAULT_RIVER_BANK_WIDTH);
83+
84+
mPathFullLineSize = DensityUtil.dip2px(context, DEFAULT_PATH_FULL_LINE_SIZE);
85+
mPathDottedLineSize = DensityUtil.dip2px(context, DEFAULT_PATH_DOTTED_LINE_SIZE);
86+
mFishWidth = DensityUtil.dip2px(context, DEFAULT_FISH_WIDTH);
87+
mFishHeight = DensityUtil.dip2px(context, DEFAULT_FISH_HEIGHT);
88+
mFishEyeSize = DensityUtil.dip2px(context, DEFAULT_FISH_EYE_SIZE);
89+
mRiverWidth = DensityUtil.dip2px(context, DEFAULT_RIVER_WIDTH);
90+
mRiverHeight = DensityUtil.dip2px(context, DEFAULT_RIVER_HEIGHT);
9291

9392
mColor = DEFAULT_COLOR;
9493

@@ -97,7 +96,7 @@ private void init(Context context) {
9796

9897
private void setupPaint() {
9998
mPaint.setAntiAlias(true);
100-
mPaint.setStrokeWidth(getStrokeWidth());
99+
mPaint.setStrokeWidth(mRiverBankWidth);
101100
mPaint.setStyle(Paint.Style.STROKE);
102101
mPaint.setStrokeJoin(Paint.Join.MITER);
103102
mPaint.setPathEffect(new DashPathEffect(new float[]{mPathFullLineSize, mPathDottedLineSize}, mPathDottedLineSize));
@@ -229,7 +228,7 @@ private Path createRiverPath(RectF arcBounds) {
229228
RectF rectF = new RectF(arcBounds.centerX() - mRiverWidth / 2.0f, arcBounds.centerY() - mRiverHeight / 2.0f,
230229
arcBounds.centerX() + mRiverWidth / 2.0f, arcBounds.centerY() + mRiverHeight / 2.0f);
231230

232-
rectF.inset(mStrokeWidth / 2.0f, mStrokeWidth / 2.0f);
231+
rectF.inset(mRiverBankWidth / 2.0f, mRiverBankWidth / 2.0f);
233232

234233
mRiverPath.addRect(rectF, Path.Direction.CW);
235234

library/src/main/java/app/dinus/com/loadingdrawable/render/animal/GhostsEyeLoadingRenderer.java

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import android.util.DisplayMetrics;
1212
import android.view.animation.Interpolator;
1313

14+
import app.dinus.com.loadingdrawable.DensityUtil;
1415
import app.dinus.com.loadingdrawable.render.LoadingRenderer;
1516

1617
public class GhostsEyeLoadingRenderer extends LoadingRenderer {
@@ -19,7 +20,7 @@ public class GhostsEyeLoadingRenderer extends LoadingRenderer {
1920

2021
private static final float DEFAULT_WIDTH = 200.0f;
2122
private static final float DEFAULT_HEIGHT = 176.0f;
22-
private static final float DEFAULT_STROKE_WIDTH = 5.0f;
23+
private static final float DEFAULT_EYE_EDGE_WIDTH = 5.0f;
2324

2425
private static final float DEFAULT_EYE_BALL_HEIGHT = 9.0f;
2526
private static final float DEFAULT_EYE_BALL_WIDTH = 11.0f;
@@ -53,6 +54,7 @@ public class GhostsEyeLoadingRenderer extends LoadingRenderer {
5354
private float mAboveRadianEyeOffsetX;
5455
private float mEyeBallOffsetY;
5556

57+
private float mEyeEdgeWidth;
5658
private float mEyeBallWidth;
5759
private float mEyeBallHeight;
5860

@@ -70,21 +72,18 @@ public GhostsEyeLoadingRenderer(Context context) {
7072
}
7173

7274
private void init(Context context) {
73-
final DisplayMetrics metrics = context.getResources().getDisplayMetrics();
74-
final float screenDensity = metrics.density;
75+
mWidth = DensityUtil.dip2px(context, DEFAULT_WIDTH);
76+
mHeight = DensityUtil.dip2px(context, DEFAULT_HEIGHT);
77+
mEyeEdgeWidth = DensityUtil.dip2px(context, DEFAULT_EYE_EDGE_WIDTH);
7578

76-
mWidth = DEFAULT_WIDTH * screenDensity;
77-
mHeight = DEFAULT_HEIGHT * screenDensity;
78-
mStrokeWidth = DEFAULT_STROKE_WIDTH * screenDensity;
79+
mEyeInterval = DensityUtil.dip2px(context, DEFAULT_EYE_CIRCLE_INTERVAL);
80+
mEyeBallOffsetY = DensityUtil.dip2px(context, DEFAULT_EYE_BALL_OFFSET_Y);
81+
mEyeCircleRadius = DensityUtil.dip2px(context, DEFAULT_EYE_CIRCLE_RADIUS);
82+
mMaxEyeJumptDistance = DensityUtil.dip2px(context, DEFAULT_MAX_EYE_JUMP_DISTANCE);
83+
mAboveRadianEyeOffsetX = DensityUtil.dip2px(context, DEFAULT_ABOVE_RADIAN_EYE_CIRCLE_OFFSET);
7984

80-
mEyeInterval = DEFAULT_EYE_CIRCLE_INTERVAL * screenDensity;
81-
mEyeBallOffsetY = DEFAULT_EYE_BALL_OFFSET_Y * screenDensity;
82-
mEyeCircleRadius = DEFAULT_EYE_CIRCLE_RADIUS * screenDensity;
83-
mMaxEyeJumptDistance = DEFAULT_MAX_EYE_JUMP_DISTANCE * screenDensity;
84-
mAboveRadianEyeOffsetX = DEFAULT_ABOVE_RADIAN_EYE_CIRCLE_OFFSET * screenDensity;
85-
86-
mEyeBallWidth = DEFAULT_EYE_BALL_WIDTH * screenDensity;
87-
mEyeBallHeight = DEFAULT_EYE_BALL_HEIGHT * screenDensity;
85+
mEyeBallWidth = DensityUtil.dip2px(context, DEFAULT_EYE_BALL_WIDTH);
86+
mEyeBallHeight = DensityUtil.dip2px(context, DEFAULT_EYE_BALL_HEIGHT);
8887

8988
mColor = DEFAULT_COLOR;
9089

@@ -93,7 +92,7 @@ private void init(Context context) {
9392

9493
private void setupPaint() {
9594
mPaint.setAntiAlias(true);
96-
mPaint.setStrokeWidth(getStrokeWidth());
95+
mPaint.setStrokeWidth(mEyeEdgeWidth);
9796
mPaint.setStrokeJoin(Paint.Join.ROUND);
9897
mPaint.setStyle(Paint.Style.STROKE);
9998
mPaint.setStrokeCap(Paint.Cap.ROUND);

0 commit comments

Comments
 (0)