Support for animating Radar charts

This commit is contained in:
Daniel Cohen Gindi 2016-01-28 10:59:02 +02:00
parent 19f1b3b444
commit 6ee101c5c6
3 changed files with 54 additions and 8 deletions

View file

@ -13,6 +13,18 @@
android:id="@+id/actionToggleHighlight"
android:title="Toggle Highlight">
</item>
<item
android:id="@+id/animateX"
android:title="Animate X">
</item>
<item
android:id="@+id/animateY"
android:title="Animate Y">
</item>
<item
android:id="@+id/animateXY"
android:title="Animate XY">
</item>
<item
android:id="@+id/actionSave"
android:title="Save to SD">

View file

@ -56,6 +56,11 @@ public class RadarChartActivitry extends DemoBase {
setData();
mChart.animateXY(
1400, 1400,
Easing.EasingOption.EaseInOutQuad,
Easing.EasingOption.EaseInOutQuad);
XAxis xAxis = mChart.getXAxis();
xAxis.setTypeface(tf);
xAxis.setTextSize(9f);
@ -140,6 +145,18 @@ public class RadarChartActivitry extends DemoBase {
mChart.invalidate();
break;
}
case R.id.animateX: {
mChart.animateX(1400);
break;
}
case R.id.animateY: {
mChart.animateY(1400);
break;
}
case R.id.animateXY: {
mChart.animateXY(1400, 1400);
break;
}
case R.id.actionToggleSpin: {
mChart.spin(2000, mChart.getRotationAngle(), mChart.getRotationAngle() + 360, Easing.EasingOption.EaseInCubic);
break;

View file

@ -64,6 +64,9 @@ public class RadarChartRenderer extends LineRadarRenderer {
protected void drawDataSet(Canvas c, IRadarDataSet dataSet) {
float phaseX = mAnimator.getPhaseX();
float phaseY = mAnimator.getPhaseY();
float sliceangle = mChart.getSliceAngle();
// calculate the factor that is needed for transforming the value to
@ -82,8 +85,10 @@ public class RadarChartRenderer extends LineRadarRenderer {
Entry e = dataSet.getEntryForIndex(j);
PointF p = Utils.getPosition(center, (e.getVal() - mChart.getYChartMin()) * factor,
sliceangle * j + mChart.getRotationAngle());
PointF p = Utils.getPosition(
center,
(e.getVal() - mChart.getYChartMin()) * factor * phaseY,
sliceangle * j * phaseX + mChart.getRotationAngle());
if (Float.isNaN(p.x))
continue;
@ -125,6 +130,9 @@ public class RadarChartRenderer extends LineRadarRenderer {
@Override
public void drawValues(Canvas c) {
float phaseX = mAnimator.getPhaseX();
float phaseY = mAnimator.getPhaseY();
float sliceangle = mChart.getSliceAngle();
// calculate the factor that is needed for transforming the value to
@ -149,8 +157,10 @@ public class RadarChartRenderer extends LineRadarRenderer {
Entry entry = dataSet.getEntryForIndex(j);
PointF p = Utils.getPosition(center, (entry.getVal() - mChart.getYChartMin()) * factor,
sliceangle * j + mChart.getRotationAngle());
PointF p = Utils.getPosition(
center,
(entry.getVal() - mChart.getYChartMin()) * factor * phaseY,
sliceangle * j * phaseX + mChart.getRotationAngle());
drawValue(c, dataSet.getValueFormatter(), entry.getVal(), entry, i, p.x, p.y - yoffset);
}
@ -182,8 +192,10 @@ public class RadarChartRenderer extends LineRadarRenderer {
for (int i = 0; i < mChart.getData().getXValCount(); i += xIncrements) {
PointF p = Utils.getPosition(center, mChart.getYRange() * factor, sliceangle * i
+ rotationangle);
PointF p = Utils.getPosition(
center,
mChart.getYRange() * factor,
sliceangle * i + rotationangle);
c.drawLine(center.x, center.y, p.x, p.y, mWebPaint);
}
@ -212,6 +224,9 @@ public class RadarChartRenderer extends LineRadarRenderer {
@Override
public void drawHighlighted(Canvas c, Highlight[] indices) {
float phaseX = mAnimator.getPhaseX();
float phaseY = mAnimator.getPhaseY();
float sliceangle = mChart.getSliceAngle();
float factor = mChart.getFactor();
@ -239,8 +254,10 @@ public class RadarChartRenderer extends LineRadarRenderer {
if (Float.isNaN(y))
continue;
PointF p = Utils.getPosition(center, y * factor,
sliceangle * j + mChart.getRotationAngle());
PointF p = Utils.getPosition(
center,
y * factor * phaseY,
sliceangle * j * phaseX + mChart.getRotationAngle());
float[] pts = new float[]{
p.x, p.y