-
Notifications
You must be signed in to change notification settings - Fork 191
Expand file tree
/
Copy pathFrescoCircularProgressDrawable.java
More file actions
151 lines (132 loc) · 4.12 KB
/
FrescoCircularProgressDrawable.java
File metadata and controls
151 lines (132 loc) · 4.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package com.sefford.circularprogressdrawable;
import android.graphics.Canvas;
/**
* Created by Ilya Eremin on 25.04.2015.
*/
public class FrescoCircularProgressDrawable extends CircularProgressDrawable {
private final int size;
/**
* Creates a new CouponDrawable.
*
* @param ringWidth Width of the filled ring
* @param circleScale Scale difference between the outer ring and the inner circle
* @param outlineColor Color for the outline color
* @param ringColor Color for the filled ring
* @param centerColor Color for the center element
*/
public FrescoCircularProgressDrawable(int ringWidth, float circleScale, int outlineColor, int ringColor, int centerColor, int size) {
super(ringWidth, circleScale, outlineColor, ringColor, centerColor);
this.size = size;
}
@Override protected boolean onLevelChange(int level) {
if (indeterminate) {
this.progress = (float)level/10000;
} else {
this.progress = PROGRESS_FACTOR * ((float)level/10000);
}
invalidateSelf();
return super.onLevelChange(level);
}
@Override public void draw(Canvas canvas) {
draw(canvas, size);
}
/**
* Helper class to manage the creation of a CircularProgressDrawable
*
* @author Saul Diaz <sefford@gmail.com>
*/
public static class Builder {
/**
* Witdh of the stroke of the filled ring
*/
int ringWidth;
/**
* Color of the outline of the empty ring in #AARRGGBB mode.
*/
int outlineColor;
/**
* Color of the filled ring in #AARRGGBB mode.
*/
int ringColor;
/**
* Color of the inner circle in #AARRGGBB mode.
*/
int centerColor;
/**
* Scale between the outer ring and the inner circle
*/
float circleScale = 0.75f;
/**
* Circle size in pixels
*/
int size;
/**
* Sets the ring width.
*
* @param ringWidth Default ring width
* @return This builder
*/
public Builder setRingWidth(int ringWidth) {
this.ringWidth = ringWidth;
return this;
}
/**
* Sets the default empty outer ring outline color.
*
* @param outlineColor Outline color in #AARRGGBB format.
* @return
*/
public Builder setOutlineColor(int outlineColor) {
this.outlineColor = outlineColor;
return this;
}
/**
* Sets the progress ring color.
*
* @param ringColor Ring color in #AARRGGBB format.
* @returns This Builder
*/
public Builder setRingColor(int ringColor) {
this.ringColor = ringColor;
return this;
}
/**
* Sets the inner circle color.
*
* @param centerColor Inner circle color in #AARRGGBB format.
* @return This builder
*/
public Builder setCenterColor(int centerColor) {
this.centerColor = centerColor;
return this;
}
/**
* Sets the inner circle scale. Defaults to 0.75.
*
* @param circleScale Inner circle scale.
* @return This builder
*/
public Builder setInnerCircleScale(float circleScale) {
this.circleScale = circleScale;
return this;
}
/**
* Sets the size of the circle in pixels. Default fill whole view
*
* @param size in pixels
* @return This builder
*/
public Builder setSize(int size){
this.size = size;
return this;
}
/**
* Creates a new CircularProgressDrawable with the requested parameters
*
* @return New CircularProgressDrawableInstance
*/
public FrescoCircularProgressDrawable create() {
return new FrescoCircularProgressDrawable(ringWidth, circleScale, outlineColor, ringColor, centerColor, size);
}
}
}