summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/view/PieChartView.java
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-01-12 10:35:32 +0100
committerByteHamster <info@bytehamster.com>2020-01-12 10:35:32 +0100
commitf5e819f5dc01384064b0468bc2be74373cd52a36 (patch)
treeb1882e1418f268c5233fd0889919effd49e080cd /app/src/main/java/de/danoeh/antennapod/view/PieChartView.java
parent2f0c627b15af26aace320e1984d6f398a7ee0abe (diff)
downloadAntennaPod-f5e819f5dc01384064b0468bc2be74373cd52a36.zip
Added colorful dots to statistics
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/view/PieChartView.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/PieChartView.java69
1 files changed, 48 insertions, 21 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/view/PieChartView.java b/app/src/main/java/de/danoeh/antennapod/view/PieChartView.java
index d1b2abf23..c0c74c42c 100644
--- a/app/src/main/java/de/danoeh/antennapod/view/PieChartView.java
+++ b/app/src/main/java/de/danoeh/antennapod/view/PieChartView.java
@@ -39,14 +39,10 @@ public class PieChartView extends AppCompatImageView {
}
/**
- * Set array od names, array of values and array of colors.
+ * Set of data values to display.
*/
- public void setData(float[] dataValues) {
- drawable.dataValues = dataValues;
- drawable.valueSum = 0;
- for (float datum : dataValues) {
- drawable.valueSum += datum;
- }
+ public void setData(PieChartData data) {
+ drawable.data = data;
}
@Override
@@ -56,15 +52,50 @@ public class PieChartView extends AppCompatImageView {
setMeasuredDimension(width, width / 2);
}
- private static class PieChartDrawable extends Drawable {
- private static final float MIN_DEGREES = 10f;
- private static final float PADDING_DEGREES = 3f;
- private static final float STROKE_SIZE = 15f;
+ public static class PieChartData {
private static final int[] COLOR_VALUES = new int[]{0xFF3775E6, 0xffe51c23, 0xffff9800, 0xff259b24, 0xff9c27b0,
0xff0099c6, 0xffdd4477, 0xff66aa00, 0xffb82e2e, 0xff316395,
0xff994499, 0xff22aa99, 0xffaaaa11, 0xff6633cc, 0xff0073e6};
- private float[] dataValues;
- private float valueSum;
+
+ private final float valueSum;
+ private final float[] values;
+
+ public PieChartData(float[] values) {
+ this.values = values;
+ float valueSum = 0;
+ for (float datum : values) {
+ valueSum += datum;
+ }
+ this.valueSum = valueSum;
+ }
+
+ public float getSum() {
+ return valueSum;
+ }
+
+ public float getPercentageOfItem(int index) {
+ if (valueSum == 0) {
+ return 0;
+ }
+ return values[index] / valueSum;
+ }
+
+ public boolean isLargeEnoughToDisplay(int index) {
+ return getPercentageOfItem(index) > 0.05;
+ }
+
+ public int getColorOfItem(int index) {
+ if (!isLargeEnoughToDisplay(index)) {
+ return Color.GRAY;
+ }
+ return COLOR_VALUES[index % COLOR_VALUES.length];
+ }
+ }
+
+ private static class PieChartDrawable extends Drawable {
+ private static final float PADDING_DEGREES = 3f;
+ private static final float STROKE_SIZE = 15f;
+ private PieChartData data;
private final Paint paint;
private PieChartDrawable() {
@@ -78,22 +109,18 @@ public class PieChartView extends AppCompatImageView {
@Override
public void draw(@NonNull Canvas canvas) {
- if (valueSum == 0) {
- return;
- }
float radius = getBounds().height() - STROKE_SIZE;
float center = getBounds().width() / 2.f;
RectF arcBounds = new RectF(center - radius, STROKE_SIZE, center + radius, STROKE_SIZE + radius * 2);
float startAngle = 180;
- for (int i = 0; i < dataValues.length; i++) {
- float datum = dataValues[i];
- float sweepAngle = (180f - PADDING_DEGREES) * (datum / valueSum);
- if (sweepAngle < MIN_DEGREES) {
+ for (int i = 0; i < data.values.length; i++) {
+ if (!data.isLargeEnoughToDisplay(i)) {
break;
}
- paint.setColor(COLOR_VALUES[i % COLOR_VALUES.length]);
+ paint.setColor(data.getColorOfItem(i));
float padding = i == 0 ? PADDING_DEGREES / 2 : PADDING_DEGREES;
+ float sweepAngle = (180f - PADDING_DEGREES) * data.getPercentageOfItem(i);
canvas.drawArc(arcBounds, startAngle + padding, sweepAngle - padding, false, paint);
startAngle = startAngle + sweepAngle;
}