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

Skip to content

Commit d924d2f

Browse files
author
dinuscxj
committed
add Builder for all the LoadingRenderer
1 parent 4486680 commit d924d2f

22 files changed

+553
-420
lines changed

README-ZH.md

Lines changed: 0 additions & 94 deletions
This file was deleted.

README.md

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,23 @@
11

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

9-
Some android loading drawable, can be combined with any View as the loading View and Progressbar,
10-
11-
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/>
12-
Perhaps you prefer to use gif way to achieve : [GifLoadingView] (https://github.com/Rogero0o/GifLoadingView). <br/>
8+
LoadingDrawable is some android animations implement of drawable: a library can be used in the pull-down to refresh, the placeholders of image loading and the time-consuming tasks. 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/>
9+
The following content show a brief overview of LoadingDrawable
10+
11+
* It extends `Drawable` and implement the interface `Animatable`
12+
* it uses strategy mode
13+
* It can be used as the background of View or content of `ImageView`
14+
* It's constructor must be passed a `LoadingRenderer`
15+
* It interact with `LoadingRenderer` by the callback `Callback`
16+
* `LoadingRenderer` is used for measuring and drawing the `LoadingDrawable`. note:
17+
`LoadingRenderer` is the core
18+
* `LoadingRenderer` only can be created by their `Builder`.
19+
20+
Learn more about LoadingDrawable on the [Wiki Home] (https://github.com/dinuscxj/LoadingDrawable/wiki).
1321

1422
![](https://raw.githubusercontent.com/dinuscxj/LoadingDrawable/master/Preview/ShapeChangeDrawable.gif)
1523
![](https://raw.githubusercontent.com/dinuscxj/LoadingDrawable/master/Preview/GoodsDrawable.gif)
@@ -18,7 +26,7 @@
1826
![](https://raw.githubusercontent.com/dinuscxj/LoadingDrawable/master/Preview/CircleJumpDrawable.gif)
1927
![](https://raw.githubusercontent.com/dinuscxj/LoadingDrawable/master/Preview/CircleRotateDrawable.gif)
2028

21-
## Features
29+
## LoadingRenderer Style
2230

2331
#### ShapeChange
2432
* CircleBroodLoadingRenderer
@@ -48,22 +56,8 @@
4856
* DanceLoadingRenderer
4957
* CollisionLoadingRenderer
5058

51-
## TODO
52-
When I feel less bugs enough, I will add a gradle dependency. So I hope you will make more Suggestions or Issues.
53-
5459
## Usage
55-
#### Gradle
56-
```
57-
compile project(':library')
58-
```
59-
#### In java
60-
61-
```java
62-
LoadingView.setLoadingRenderer(LoadingRenderer);
63-
```
64-
65-
#### In xml
66-
60+
Define the `LoadingView` in XML and specify the `LoadingRenderer` style:
6761
```xml
6862
<app.dinus.com.loadingdrawable.LoadingView
6963
android:id="@+id/level_view"
@@ -73,8 +67,14 @@
7367
android:background="#fff1c02e"
7468
app:loading_renderer="LevelLoadingRenderer"/>
7569
```
76-
77-
If the LoadingView can't meet your requirements, you might need to refer to the LoadingView customize the View you need
70+
Or specify the `LoadingRenderer` style in Java
71+
```java
72+
***LoadingRenderer.Builder builder = new ***LoadingRenderer.Builder(context);
73+
LoadingView.setLoadingRenderer(builder.build());
74+
```
75+
76+
## TODO
77+
When I feel less bugs enough, I will add a gradle dependency. So I hope you will make more Suggestions or Issues.
7878

7979
## Misc
8080
If you like LoadingDrawable or use it, could you please:

app/src/main/java/app/dinus/com/example/CircleRotateActivity.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,16 @@
22

33
import android.content.Context;
44
import android.content.Intent;
5+
import android.graphics.Color;
56
import android.os.Bundle;
67
import android.support.v7.app.AppCompatActivity;
78

9+
import app.dinus.com.loadingdrawable.DensityUtil;
10+
import app.dinus.com.loadingdrawable.LoadingView;
11+
import app.dinus.com.loadingdrawable.render.LoadingRenderer;
12+
import app.dinus.com.loadingdrawable.render.circle.rotate.LevelLoadingRenderer;
13+
import app.dinus.com.loadingdrawable.render.circle.rotate.MaterialLoadingRenderer;
14+
815
public class CircleRotateActivity extends AppCompatActivity {
916
public static void startActivity(Context context) {
1017
Intent intent = new Intent(context, CircleRotateActivity.class);

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

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
import android.graphics.Canvas;
44
import android.graphics.ColorFilter;
55
import android.graphics.PixelFormat;
6+
import android.graphics.Rect;
67
import android.graphics.drawable.Animatable;
78
import android.graphics.drawable.Drawable;
89

910
import app.dinus.com.loadingdrawable.render.LoadingRenderer;
1011

1112
public class LoadingDrawable extends Drawable implements Animatable {
12-
private LoadingRenderer mLoadingRender;
13+
private final LoadingRenderer mLoadingRender;
1314

1415
private final Callback mCallback = new Callback() {
1516
@Override
@@ -33,19 +34,27 @@ public LoadingDrawable(LoadingRenderer loadingRender) {
3334
this.mLoadingRender.setCallback(mCallback);
3435
}
3536

37+
@Override
38+
protected void onBoundsChange(Rect bounds) {
39+
super.onBoundsChange(bounds);
40+
this.mLoadingRender.setBounds(bounds);
41+
}
42+
3643
@Override
3744
public void draw(Canvas canvas) {
38-
mLoadingRender.draw(canvas, getBounds());
45+
if (!getBounds().isEmpty()) {
46+
this.mLoadingRender.draw(canvas);
47+
}
3948
}
4049

4150
@Override
4251
public void setAlpha(int alpha) {
43-
mLoadingRender.setAlpha(alpha);
52+
this.mLoadingRender.setAlpha(alpha);
4453
}
4554

4655
@Override
4756
public void setColorFilter(ColorFilter cf) {
48-
mLoadingRender.setColorFilter(cf);
57+
this.mLoadingRender.setColorFilter(cf);
4958
}
5059

5160
@Override
@@ -55,26 +64,26 @@ public int getOpacity() {
5564

5665
@Override
5766
public void start() {
58-
mLoadingRender.start();
67+
this.mLoadingRender.start();
5968
}
6069

6170
@Override
6271
public void stop() {
63-
mLoadingRender.stop();
72+
this.mLoadingRender.stop();
6473
}
6574

6675
@Override
6776
public boolean isRunning() {
68-
return mLoadingRender.isRunning();
77+
return this.mLoadingRender.isRunning();
6978
}
7079

7180
@Override
7281
public int getIntrinsicHeight() {
73-
return (int) mLoadingRender.mHeight;
82+
return (int) this.mLoadingRender.mHeight;
7483
}
7584

7685
@Override
7786
public int getIntrinsicWidth() {
78-
return (int) mLoadingRender.mWidth;
87+
return (int) this.mLoadingRender.mWidth;
7988
}
8089
}

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import android.graphics.Canvas;
77
import android.graphics.ColorFilter;
88
import android.graphics.Rect;
9+
import android.graphics.RectF;
910
import android.graphics.drawable.Drawable;
1011
import android.os.Handler;
1112
import android.os.Looper;
@@ -28,6 +29,12 @@ public void onAnimationUpdate(ValueAnimator animation) {
2829
}
2930
};
3031

32+
/**
33+
* Whenever {@link LoadingDrawable} boundary changes mBounds will be updated.
34+
* More details you can see {@link LoadingDrawable#onBoundsChange(Rect)}
35+
*/
36+
protected final Rect mBounds = new Rect();
37+
3138
private Drawable.Callback mCallback;
3239
private ValueAnimator mRenderAnimator;
3340

@@ -41,7 +48,13 @@ public LoadingRenderer(Context context) {
4148
setupAnimators();
4249
}
4350

44-
protected abstract void draw(Canvas canvas, Rect bounds);
51+
@Deprecated
52+
protected void draw(Canvas canvas, Rect bounds) {
53+
}
54+
55+
protected void draw(Canvas canvas) {
56+
draw(canvas, mBounds);
57+
}
4558

4659
protected abstract void computeRender(float renderProgress);
4760

@@ -83,6 +96,10 @@ void setCallback(Drawable.Callback callback) {
8396
this.mCallback = callback;
8497
}
8598

99+
void setBounds(Rect bounds) {
100+
mBounds.set(bounds);
101+
}
102+
86103
private void initParams(Context context) {
87104
mWidth = DensityUtil.dip2px(context, DEFAULT_SIZE);
88105
mHeight = DensityUtil.dip2px(context, DEFAULT_SIZE);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public static LoadingRenderer createLoadingRenderer(Context context, int loading
6161
if (parameterTypes != null
6262
&& parameterTypes.length == 1
6363
&& parameterTypes[0].equals(Context.class)) {
64+
constructor.setAccessible(true);
6465
return (LoadingRenderer) constructor.newInstance(context);
6566
}
6667
}

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

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public class FishLoadingRenderer extends LoadingRenderer {
7070

7171
private int mColor;
7272

73-
public FishLoadingRenderer(Context context) {
73+
private FishLoadingRenderer(Context context) {
7474
super(context);
7575
init(context);
7676
setupPaint();
@@ -103,7 +103,7 @@ private void setupPaint() {
103103
}
104104

105105
@Override
106-
public void draw(Canvas canvas, Rect bounds) {
106+
protected void draw(Canvas canvas, Rect bounds) {
107107
int saveCount = canvas.save();
108108
RectF arcBounds = mTempBounds;
109109
arcBounds.set(bounds);
@@ -153,7 +153,7 @@ private float calculateRotateDegrees(float fishProgress) {
153153
}
154154

155155
@Override
156-
public void computeRender(float renderProgress) {
156+
protected void computeRender(float renderProgress) {
157157
if (mRiverPath == null) {
158158
return;
159159
}
@@ -169,17 +169,17 @@ public void computeRender(float renderProgress) {
169169
}
170170

171171
@Override
172-
public void setAlpha(int alpha) {
172+
protected void setAlpha(int alpha) {
173173

174174
}
175175

176176
@Override
177-
public void setColorFilter(ColorFilter cf) {
177+
protected void setColorFilter(ColorFilter cf) {
178178

179179
}
180180

181181
@Override
182-
public void reset() {
182+
protected void reset() {
183183
}
184184

185185
private Path createFishEyePath(float fishEyeCenterX, float fishEyeCenterY) {
@@ -246,4 +246,17 @@ public float getInterpolation(float input) {
246246
return FISH_MOVE_POINTS[index];
247247
}
248248
}
249+
250+
public static class Builder {
251+
private Context mContext;
252+
253+
public Builder(Context mContext) {
254+
this.mContext = mContext;
255+
}
256+
257+
public FishLoadingRenderer build() {
258+
FishLoadingRenderer loadingRenderer = new FishLoadingRenderer(mContext);
259+
return loadingRenderer;
260+
}
261+
}
249262
}

0 commit comments

Comments
 (0)