Skip to content

Commit 6ee101c

Browse files
committed
Support for animating Radar charts
1 parent 19f1b3b commit 6ee101c

3 files changed

Lines changed: 54 additions & 8 deletions

File tree

‎MPChartExample/res/menu/radar.xml‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,18 @@
1313
android:id="@+id/actionToggleHighlight"
1414
android:title="Toggle Highlight">
1515
</item>
16+
<item
17+
android:id="@+id/animateX"
18+
android:title="Animate X">
19+
</item>
20+
<item
21+
android:id="@+id/animateY"
22+
android:title="Animate Y">
23+
</item>
24+
<item
25+
android:id="@+id/animateXY"
26+
android:title="Animate XY">
27+
</item>
1628
<item
1729
android:id="@+id/actionSave"
1830
android:title="Save to SD">

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ protected void onCreate(Bundle savedInstanceState) {
5656

5757
setData();
5858

59+
mChart.animateXY(
60+
1400, 1400,
61+
Easing.EasingOption.EaseInOutQuad,
62+
Easing.EasingOption.EaseInOutQuad);
63+
5964
XAxis xAxis = mChart.getXAxis();
6065
xAxis.setTypeface(tf);
6166
xAxis.setTextSize(9f);
@@ -140,6 +145,18 @@ public boolean onOptionsItemSelected(MenuItem item) {
140145
mChart.invalidate();
141146
break;
142147
}
148+
case R.id.animateX: {
149+
mChart.animateX(1400);
150+
break;
151+
}
152+
case R.id.animateY: {
153+
mChart.animateY(1400);
154+
break;
155+
}
156+
case R.id.animateXY: {
157+
mChart.animateXY(1400, 1400);
158+
break;
159+
}
143160
case R.id.actionToggleSpin: {
144161
mChart.spin(2000, mChart.getRotationAngle(), mChart.getRotationAngle() + 360, Easing.EasingOption.EaseInCubic);
145162
break;

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

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ public void drawData(Canvas c) {
6464

6565
protected void drawDataSet(Canvas c, IRadarDataSet dataSet) {
6666

67+
float phaseX = mAnimator.getPhaseX();
68+
float phaseY = mAnimator.getPhaseY();
69+
6770
float sliceangle = mChart.getSliceAngle();
6871

6972
// calculate the factor that is needed for transforming the value to
@@ -82,8 +85,10 @@ protected void drawDataSet(Canvas c, IRadarDataSet dataSet) {
8285

8386
Entry e = dataSet.getEntryForIndex(j);
8487

85-
PointF p = Utils.getPosition(center, (e.getVal() - mChart.getYChartMin()) * factor,
86-
sliceangle * j + mChart.getRotationAngle());
88+
PointF p = Utils.getPosition(
89+
center,
90+
(e.getVal() - mChart.getYChartMin()) * factor * phaseY,
91+
sliceangle * j * phaseX + mChart.getRotationAngle());
8792

8893
if (Float.isNaN(p.x))
8994
continue;
@@ -125,6 +130,9 @@ protected void drawDataSet(Canvas c, IRadarDataSet dataSet) {
125130
@Override
126131
public void drawValues(Canvas c) {
127132

133+
float phaseX = mAnimator.getPhaseX();
134+
float phaseY = mAnimator.getPhaseY();
135+
128136
float sliceangle = mChart.getSliceAngle();
129137

130138
// calculate the factor that is needed for transforming the value to
@@ -149,8 +157,10 @@ public void drawValues(Canvas c) {
149157

150158
Entry entry = dataSet.getEntryForIndex(j);
151159

152-
PointF p = Utils.getPosition(center, (entry.getVal() - mChart.getYChartMin()) * factor,
153-
sliceangle * j + mChart.getRotationAngle());
160+
PointF p = Utils.getPosition(
161+
center,
162+
(entry.getVal() - mChart.getYChartMin()) * factor * phaseY,
163+
sliceangle * j * phaseX + mChart.getRotationAngle());
154164

155165
drawValue(c, dataSet.getValueFormatter(), entry.getVal(), entry, i, p.x, p.y - yoffset);
156166
}
@@ -182,8 +192,10 @@ protected void drawWeb(Canvas c) {
182192

183193
for (int i = 0; i < mChart.getData().getXValCount(); i += xIncrements) {
184194

185-
PointF p = Utils.getPosition(center, mChart.getYRange() * factor, sliceangle * i
186-
+ rotationangle);
195+
PointF p = Utils.getPosition(
196+
center,
197+
mChart.getYRange() * factor,
198+
sliceangle * i + rotationangle);
187199

188200
c.drawLine(center.x, center.y, p.x, p.y, mWebPaint);
189201
}
@@ -212,6 +224,9 @@ protected void drawWeb(Canvas c) {
212224
@Override
213225
public void drawHighlighted(Canvas c, Highlight[] indices) {
214226

227+
float phaseX = mAnimator.getPhaseX();
228+
float phaseY = mAnimator.getPhaseY();
229+
215230
float sliceangle = mChart.getSliceAngle();
216231
float factor = mChart.getFactor();
217232

@@ -239,8 +254,10 @@ public void drawHighlighted(Canvas c, Highlight[] indices) {
239254
if (Float.isNaN(y))
240255
continue;
241256

242-
PointF p = Utils.getPosition(center, y * factor,
243-
sliceangle * j + mChart.getRotationAngle());
257+
PointF p = Utils.getPosition(
258+
center,
259+
y * factor * phaseY,
260+
sliceangle * j * phaseX + mChart.getRotationAngle());
244261

245262
float[] pts = new float[]{
246263
p.x, p.y

0 commit comments

Comments
 (0)