X Tutup
Skip to content

Commit 6347d68

Browse files
committed
Added feature for highlight circle in radar chart
1 parent a7da427 commit 6347d68

File tree

7 files changed

+300
-1
lines changed

7 files changed

+300
-1
lines changed

MPChartExample/res/menu/radar.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
android:id="@+id/actionToggleHighlight"
1414
android:title="Toggle Highlight">
1515
</item>
16+
<item
17+
android:id="@+id/actionToggleHighlightCircle"
18+
android:title="Toggle highlight circle">
19+
</item>
1620
<item
1721
android:id="@+id/animateX"
1822
android:title="Animate X">

MPChartExample/src/com/xxmassdeveloper/mpchartexample/RadarChartActivitry.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,17 @@ public boolean onOptionsItemSelected(MenuItem item) {
124124
mChart.invalidate();
125125
break;
126126
}
127+
case R.id.actionToggleHighlightCircle: {
128+
129+
ArrayList<IRadarDataSet> sets = (ArrayList<IRadarDataSet>) mChart.getData()
130+
.getDataSets();
131+
132+
for (IRadarDataSet set : sets) {
133+
set.setDrawHighlightCircleEnabled(!set.isDrawHighlightCircleEnabled());
134+
}
135+
mChart.invalidate();
136+
break;
137+
}
127138
case R.id.actionSave: {
128139
if (mChart.saveToPath("title" + System.currentTimeMillis(), "")) {
129140
Toast.makeText(getApplicationContext(), "Saving SUCCESSFUL!",

MPChartLib/src/com/github/mikephil/charting/data/RadarDataSet.java

Lines changed: 102 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,118 @@
11

22
package com.github.mikephil.charting.data;
33

4+
import android.graphics.Color;
5+
46
import com.github.mikephil.charting.interfaces.datasets.IRadarDataSet;
7+
import com.github.mikephil.charting.utils.ColorTemplate;
58

69
import java.util.ArrayList;
710
import java.util.List;
811

912
public class RadarDataSet extends LineRadarDataSet<Entry> implements IRadarDataSet {
10-
13+
14+
/// flag indicating whether highlight circle should be drawn or not
15+
protected boolean mDrawHighlightCircleEnabled = false;
16+
17+
protected int mHighlightCircleFillColor = Color.WHITE;
18+
19+
/// The stroke color for highlight circle.
20+
/// If Utils.COLOR_NONE, the color of the dataset is taken.
21+
protected int mHighlightCircleStrokeColor = ColorTemplate.COLOR_NONE;
22+
23+
protected int mHighlightCircleStrokeAlpha = (int)(0.3 * 255);
24+
protected float mHighlightCircleInnerRadius = 3.0f;
25+
protected float mHighlightCircleOuterRadius = 4.0f;
26+
protected float mHighlightCircleStrokeWidth = 2.0f;
27+
1128
public RadarDataSet(List<Entry> yVals, String label) {
1229
super(yVals, label);
1330
}
1431

32+
/// Returns true if highlight circle should be drawn, false if not
33+
@Override
34+
public boolean isDrawHighlightCircleEnabled()
35+
{
36+
return mDrawHighlightCircleEnabled;
37+
}
38+
39+
/// Sets whether highlight circle should be drawn or not
40+
@Override
41+
public void setDrawHighlightCircleEnabled(boolean enabled)
42+
{
43+
mDrawHighlightCircleEnabled = enabled;
44+
}
45+
46+
@Override
47+
public int getHighlightCircleFillColor()
48+
{
49+
return mHighlightCircleFillColor;
50+
}
51+
52+
public void setHighlightCircleFillColor(int color)
53+
{
54+
mHighlightCircleFillColor = color;
55+
}
56+
57+
/// Returns the stroke color for highlight circle.
58+
/// If Utils.COLOR_NONE, the color of the dataset is taken.
59+
@Override
60+
public int getHighlightCircleStrokeColor()
61+
{
62+
return mHighlightCircleStrokeColor;
63+
}
64+
65+
/// Sets the stroke color for highlight circle.
66+
/// Set to Utils.COLOR_NONE in order to use the color of the dataset;
67+
public void setHighlightCircleStrokeColor(int color)
68+
{
69+
mHighlightCircleStrokeColor = color;
70+
}
71+
72+
@Override
73+
public int getHighlightCircleStrokeAlpha()
74+
{
75+
return mHighlightCircleStrokeAlpha;
76+
}
77+
78+
public void setHighlightCircleStrokeAlpha(int alpha)
79+
{
80+
mHighlightCircleStrokeAlpha = alpha;
81+
}
82+
83+
@Override
84+
public float getHighlightCircleInnerRadius()
85+
{
86+
return mHighlightCircleInnerRadius;
87+
}
88+
89+
public void setHighlightCircleInnerRadius(float radius)
90+
{
91+
mHighlightCircleInnerRadius = radius;
92+
}
93+
94+
@Override
95+
public float getHighlightCircleOuterRadius()
96+
{
97+
return mHighlightCircleOuterRadius;
98+
}
99+
100+
public void setHighlightCircleOuterRadius(float radius)
101+
{
102+
mHighlightCircleOuterRadius = radius;
103+
}
104+
105+
@Override
106+
public float getHighlightCircleStrokeWidth()
107+
{
108+
return mHighlightCircleStrokeWidth;
109+
}
110+
111+
public void setHighlightCircleStrokeWidth(float strokeWidth)
112+
{
113+
mHighlightCircleStrokeWidth = strokeWidth;
114+
}
115+
15116
@Override
16117
public DataSet<Entry> copy() {
17118

MPChartLib/src/com/github/mikephil/charting/data/realm/implementation/RealmRadarDataSet.java

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.github.mikephil.charting.data.realm.implementation;
22

3+
import android.graphics.Color;
4+
35
import com.github.mikephil.charting.data.realm.base.RealmLineRadarDataSet;
46
import com.github.mikephil.charting.interfaces.datasets.IRadarDataSet;
7+
import com.github.mikephil.charting.utils.ColorTemplate;
58

69
import io.realm.RealmObject;
710
import io.realm.RealmResults;
@@ -11,6 +14,20 @@
1114
*/
1215
public class RealmRadarDataSet<T extends RealmObject> extends RealmLineRadarDataSet<T> implements IRadarDataSet {
1316

17+
/// flag indicating whether highlight circle should be drawn or not
18+
protected boolean mDrawHighlightCircleEnabled = false;
19+
20+
protected int mHighlightCircleFillColor = Color.WHITE;
21+
22+
/// The stroke color for highlight circle.
23+
/// If Utils.COLOR_NONE, the color of the dataset is taken.
24+
protected int mHighlightCircleStrokeColor = ColorTemplate.COLOR_NONE;
25+
26+
protected int mHighlightCircleStrokeAlpha = (int)(0.3 * 255);
27+
protected float mHighlightCircleInnerRadius = 3.0f;
28+
protected float mHighlightCircleOuterRadius = 4.0f;
29+
protected float mHighlightCircleStrokeWidth = 2.0f;
30+
1431
/**
1532
* Constructor for creating a RadarDataSet with realm data.
1633
*
@@ -38,6 +55,90 @@ public RealmRadarDataSet(RealmResults<T> result, String yValuesField, String xIn
3855
calcMinMax(0, results.size());
3956
}
4057

58+
/// Returns true if highlight circle should be drawn, false if not
59+
@Override
60+
public boolean isDrawHighlightCircleEnabled()
61+
{
62+
return mDrawHighlightCircleEnabled;
63+
}
64+
65+
/// Sets whether highlight circle should be drawn or not
66+
@Override
67+
public void setDrawHighlightCircleEnabled(boolean enabled)
68+
{
69+
mDrawHighlightCircleEnabled = enabled;
70+
}
71+
72+
@Override
73+
public int getHighlightCircleFillColor()
74+
{
75+
return mHighlightCircleFillColor;
76+
}
77+
78+
public void setHighlightCircleFillColor(int color)
79+
{
80+
mHighlightCircleFillColor = color;
81+
}
82+
83+
/// Returns the stroke color for highlight circle.
84+
/// If Utils.COLOR_NONE, the color of the dataset is taken.
85+
@Override
86+
public int getHighlightCircleStrokeColor()
87+
{
88+
return mHighlightCircleStrokeColor;
89+
}
90+
91+
/// Sets the stroke color for highlight circle.
92+
/// Set to Utils.COLOR_NONE in order to use the color of the dataset;
93+
public void setHighlightCircleStrokeColor(int color)
94+
{
95+
mHighlightCircleStrokeColor = color;
96+
}
97+
98+
@Override
99+
public int getHighlightCircleStrokeAlpha()
100+
{
101+
return mHighlightCircleStrokeAlpha;
102+
}
103+
104+
public void setHighlightCircleStrokeAlpha(int alpha)
105+
{
106+
mHighlightCircleStrokeAlpha = alpha;
107+
}
108+
109+
@Override
110+
public float getHighlightCircleInnerRadius()
111+
{
112+
return mHighlightCircleInnerRadius;
113+
}
114+
115+
public void setHighlightCircleInnerRadius(float radius)
116+
{
117+
mHighlightCircleInnerRadius = radius;
118+
}
119+
120+
@Override
121+
public float getHighlightCircleOuterRadius()
122+
{
123+
return mHighlightCircleOuterRadius;
124+
}
125+
126+
public void setHighlightCircleOuterRadius(float radius)
127+
{
128+
mHighlightCircleOuterRadius = radius;
129+
}
130+
131+
@Override
132+
public float getHighlightCircleStrokeWidth()
133+
{
134+
return mHighlightCircleStrokeWidth;
135+
}
136+
137+
public void setHighlightCircleStrokeWidth(float strokeWidth)
138+
{
139+
mHighlightCircleStrokeWidth = strokeWidth;
140+
}
141+
41142
@Override
42143
public void build(RealmResults<T> results) {
43144
super.build(results);

MPChartLib/src/com/github/mikephil/charting/interfaces/datasets/IRadarDataSet.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,24 @@
77
*/
88
public interface IRadarDataSet extends ILineRadarDataSet<Entry> {
99

10+
/// flag indicating whether highlight circle should be drawn or not
11+
boolean isDrawHighlightCircleEnabled();
12+
13+
/// Sets whether highlight circle should be drawn or not
14+
void setDrawHighlightCircleEnabled(boolean enabled);
15+
16+
int getHighlightCircleFillColor();
17+
18+
/// The stroke color for highlight circle.
19+
/// If Utils.COLOR_NONE, the color of the dataset is taken.
20+
int getHighlightCircleStrokeColor();
21+
22+
int getHighlightCircleStrokeAlpha();
23+
24+
float getHighlightCircleInnerRadius();
25+
26+
float getHighlightCircleOuterRadius();
27+
28+
float getHighlightCircleStrokeWidth();
1029

1130
}

MPChartLib/src/com/github/mikephil/charting/renderer/RadarChartRenderer.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.github.mikephil.charting.data.RadarData;
1515
import com.github.mikephil.charting.highlight.Highlight;
1616
import com.github.mikephil.charting.interfaces.datasets.IRadarDataSet;
17+
import com.github.mikephil.charting.utils.ColorTemplate;
1718
import com.github.mikephil.charting.utils.Utils;
1819
import com.github.mikephil.charting.utils.ViewPortHandler;
1920

@@ -25,6 +26,7 @@ public class RadarChartRenderer extends LineRadarRenderer {
2526
* paint for drawing the web
2627
*/
2728
protected Paint mWebPaint;
29+
protected Paint mHighlightCirclePaint;
2830

2931
public RadarChartRenderer(RadarChart chart, ChartAnimator animator,
3032
ViewPortHandler viewPortHandler) {
@@ -38,6 +40,8 @@ public RadarChartRenderer(RadarChart chart, ChartAnimator animator,
3840

3941
mWebPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
4042
mWebPaint.setStyle(Paint.Style.STROKE);
43+
44+
mHighlightCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
4145
}
4246

4347
public Paint getWebPaint() {
@@ -289,7 +293,62 @@ public void drawHighlighted(Canvas c, Highlight[] indices) {
289293

290294
// draw the lines
291295
drawHighlightLines(c, pts, set);
296+
297+
if (set.isDrawHighlightCircleEnabled()) {
298+
299+
if (!Float.isNaN(pts[0]) && !Float.isNaN(pts[1])) {
300+
301+
int strokeColor = set.getHighlightCircleStrokeColor();
302+
if (strokeColor == ColorTemplate.COLOR_NONE) {
303+
strokeColor = set.getColor(0);
304+
}
305+
306+
if (set.getHighlightCircleStrokeAlpha() < 255) {
307+
strokeColor = ColorTemplate.getColorWithAlphaComponent(strokeColor, set.getHighlightCircleStrokeAlpha());
308+
}
309+
310+
drawHighlightCircle(c,
311+
p,
312+
set.getHighlightCircleInnerRadius(),
313+
set.getHighlightCircleOuterRadius(),
314+
set.getHighlightCircleFillColor(),
315+
strokeColor,
316+
set.getHighlightCircleStrokeWidth());
317+
}
318+
}
292319
}
293320
}
294321

322+
public void drawHighlightCircle(Canvas c,
323+
PointF point,
324+
float innerRadius,
325+
float outerRadius,
326+
int fillColor,
327+
int strokeColor,
328+
float strokeWidth) {
329+
c.save();
330+
331+
outerRadius = Utils.convertDpToPixel(outerRadius);
332+
innerRadius = Utils.convertDpToPixel(innerRadius);
333+
334+
if (fillColor != ColorTemplate.COLOR_NONE) {
335+
Path p = new Path();
336+
p.addCircle(point.x, point.y, outerRadius, Path.Direction.CW);
337+
if (innerRadius > 0.f) {
338+
p.addCircle(point.x, point.y, innerRadius, Path.Direction.CCW);
339+
}
340+
mHighlightCirclePaint.setColor(fillColor);
341+
mHighlightCirclePaint.setStyle(Paint.Style.FILL);
342+
c.drawPath(p, mHighlightCirclePaint);
343+
}
344+
345+
if (strokeColor != ColorTemplate.COLOR_NONE) {
346+
mHighlightCirclePaint.setColor(strokeColor);
347+
mHighlightCirclePaint.setStyle(Paint.Style.STROKE);
348+
mHighlightCirclePaint.setStrokeWidth(Utils.convertDpToPixel(strokeWidth));
349+
c.drawCircle(point.x, point.y, outerRadius, mHighlightCirclePaint);
350+
}
351+
352+
c.restore();
353+
}
295354
}

MPChartLib/src/com/github/mikephil/charting/utils/ColorTemplate.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ public static int getHoloBlue() {
7575
return Color.rgb(51, 181, 229);
7676
}
7777

78+
public static int getColorWithAlphaComponent(int color, int alpha) {
79+
return (color & 0xffffff) | ((alpha & 0xff) << 24);
80+
}
81+
7882
/**
7983
* turn an array of resource-colors (contains resource-id integers) into an
8084
* array list of actual color integers

0 commit comments

Comments
 (0)
X Tutup